Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan PHP dan OAuth untuk penyepaduan pembayaran WeChat

Cara menggunakan PHP dan OAuth untuk penyepaduan pembayaran WeChat

王林
王林asal
2023-07-28 19:30:281540semak imbas

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
  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'
    ];
}
?>

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) {
    // 错误处理
}
?>
  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传递给前端进行支付
?>
  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';
}
?>

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!

Kenyataan:
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