Cara menggunakan PHP dan OAuth untuk penyepaduan pembayaran WeChat

王林
Lepaskan: 2023-07-28 20:42:02
asal
1586 orang telah melayarinya

Cara mengintegrasikan pembayaran WeChat menggunakan PHP dan OAuth

Pengenalan:
Dengan populariti pembayaran mudah alih, pembayaran WeChat telah menjadi kaedah pembayaran pilihan ramai orang. Mengintegrasikan WeChat Pay ke dalam tapak web atau aplikasi boleh memberikan pengguna pengalaman pembayaran yang mudah. Artikel ini akan memperkenalkan cara menggunakan PHP dan OAuth untuk penyepaduan pembayaran WeChat dan memberikan contoh kod yang berkaitan.

1. Mohon WeChat Pay
Sebelum menggunakan WeChat Pay, anda perlu memohon akaun pedagang WeChat Pay dan kunci berkaitan. Untuk proses permohonan khusus, sila rujuk dokumen rasmi WeChat Pay.

2. Pemilihan perpustakaan PHP OAuth
OAuth ialah standard terbuka untuk kebenaran, yang membolehkan pengguna membenarkan aplikasi pihak ketiga mengakses maklumat mereka. Dalam WeChat Pay, OAuth digunakan dalam proses log masuk dan pembayaran kebenaran pengguna. Dalam PHP, terdapat banyak perpustakaan OAuth sumber terbuka untuk dipilih, seperti OAuth1 dan OAuth2.

3. Pasang dan konfigurasikan perpustakaan OAuth

  1. Muat turun dan pasang pustaka OAuth
    PHP mempunyai banyak perpustakaan OAuth yang sangat baik untuk dipilih, seperti php-oauth2-client. Ia boleh dipasang melalui komposer. Arahan pemasangan khusus adalah seperti berikut:
composer require thephpleague/oauth2-client
Salin selepas log masuk
  1. Konfigurasikan perpustakaan OAuth
    Dalam projek, anda perlu mencipta fail Config.php untuk konfigurasi perpustakaan OAuth. Fail ini perlu mengandungi maklumat konfigurasi berkaitan pembayaran WeChat, seperti nombor pedagang, kunci, dsb. Kod sampel adalah seperti berikut:
<?php
class Config {
    public static $wechatPayConfig = [
        'clientId'          => 'YOUR_CLIENT_ID',
        'clientSecret'      => 'YOUR_CLIENT_SECRET',
        'redirectUri'       => 'YOUR_REDIRECT_URI',

        'wechatPayApiUrl'   => 'https://api.mch.weixin.qq.com/pay/unifiedorder',
        'wechatPayAppId'    => 'YOUR_APP_ID',
        'wechatPayMchId'    => 'YOUR_MCH_ID',
        'wechatPayApiKey'   => 'YOUR_API_KEY'
    ];
}
?>
Salin selepas log masuk

4. Gunakan OAuth untuk penyepaduan pembayaran WeChat

  1. Log masuk dibenarkan
    Sebelum menggunakan pembayaran WeChat, pengguna perlu membenarkan log masuk terlebih dahulu. Ini boleh dicapai melalui contoh kod berikut:
<?php
require 'vendor/autoload.php';
use LeagueOAuth2ClientProviderGenericProvider;

$provider = new GenericProvider([
    'clientId'                => Config::$wechatPayConfig['clientId'],
    'clientSecret'            => Config::$wechatPayConfig['clientSecret'],
    'redirectUri'             => Config::$wechatPayConfig['redirectUri'],
    'urlAuthorize'            => 'https://open.weixin.qq.com/connect/oauth2/authorize',
    'urlAccessToken'          => 'https://api.weixin.qq.com/sns/oauth2/access_token',
    'urlResourceOwnerDetails' => 'https://api.weixin.qq.com/sns/userinfo'
]);

// 获取授权码
if (!isset($_GET['code'])) {
    $authorizationUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: ' . $authorizationUrl);
    exit();
}

try {
    $accessToken = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);

    $resourceOwner = $provider->getResourceOwner($accessToken);
    $openid = $resourceOwner->getValues()['openid'];

    // TODO: 将openid保存到数据库中
} catch (Exception $e) {
    // 错误处理
}
?>
Salin selepas log masuk
  1. Mulakan permintaan pembayaran
    Selepas pengguna memberi kebenaran dan log masuk, dia boleh memulakan permintaan pembayaran. Ini boleh dicapai melalui contoh kod berikut:
<?php
require 'vendor/autoload.php';

$wechatPay = new WechatPay(Config::$wechatPayConfig);
$prepayInfo = $wechatPay->unifiedOrder([
    'body'             => '支付测试',
    'out_trade_no'     => time(),
    'total_fee'        => '1',
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'notify_url'       => 'http://www.example.com/notify.php',
    'trade_type'       => 'JSAPI',
    'openid'           => $openid
]);

$prepayParams = $wechatPay->getJSSDKParams($prepayInfo['prepay_id']);

// 将$prepayParams传递给前端进行支付
?>
Salin selepas log masuk
  1. Pemprosesan panggilan balik pembayaran
    Selepas pembayaran berjaya, pelayan WeChat akan memanggil semula notify_url yang ditentukan untuk memaklumkan keputusan pembayaran. Ini boleh dicapai melalui contoh kod berikut:
<?php
require 'vendor/autoload.php';
use WechatPayNotify;

$notify = new Notify(Config::$wechatPayConfig);
$notifyResult = $notify->handleNotify(); // 处理支付结果通知

if ($notifyResult) {
    // TODO: 更新数据库中的订单状态
    echo 'success'; // 返回给微信服务器,表示已成功处理通知
} else {
    // TODO: 删除数据库中的订单,或者进行其他处理
    echo 'fail';
}
?>
Salin selepas log masuk

Ringkasan:
Melalui langkah di atas, kami boleh melaksanakan fungsi pembayaran WeChat berdasarkan PHP dan OAuth. Mula-mula, laksanakan log masuk kebenaran pengguna melalui OAuth dan dapatkan openid pengguna. Kemudian, gunakan openid dan parameter yang berkaitan untuk membuat permintaan pembayaran. Akhir sekali, dalam pemberitahuan hasil pembayaran, hasil pembayaran diproses dan status pesanan yang berkaitan dikemas kini. Melalui kaedah ini, kami boleh mengintegrasikan pembayaran WeChat dengan mudah dalam tapak web atau aplikasi.

Di atas ialah contoh kod artikel ini, saya harap ia akan membantu semua orang apabila menyepadukan pembayaran WeChat menggunakan PHP dan OAuth.

Atas ialah kandungan terperinci Cara menggunakan PHP dan OAuth untuk penyepaduan pembayaran WeChat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan