Cara menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat

PHPz
Lepaskan: 2023-10-27 10:58:01
asal
696 orang telah melayarinya

Cara menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat

Cara menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat

Dengan perkembangan pesat pembayaran mudah alih, pembayaran WeChat, sebagai salah satu kaedah pembayaran paling arus perdana di China, telah menjadi kaedah pembayaran yang diperlukan untuk banyak perusahaan dan individu. Apabila membangunkan akaun awam WeChat, jika fungsi pembayaran boleh disepadukan, ia akan menyediakan pengguna kaedah pembayaran yang lebih mudah dan membawa lebih banyak faedah kepada perusahaan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat dan memberikan contoh kod khusus.

Pertama sekali, kita perlu memahami proses asas pembayaran akaun rasmi WeChat. Ia terbahagi terutamanya kepada langkah berikut:

  1. Pengguna memulakan permintaan pembayaran dalam akaun rasmi WeChat.
  2. Akaun rasmi menghantar permintaan pembayaran ke platform pembayaran WeChat.
  3. Platform pembayaran WeChat mengembalikan ID sesi transaksi prabayar (prepay_id).
  4. Akaun awam menggunakan prabayar_id untuk menjana tandatangan dan mengembalikannya ke bahagian hadapan.
  5. Bahagian hadapan memaparkan antara muka pembayaran WeChat, dan pengguna menyelesaikan operasi pembayaran.
  6. Platform pembayaran WeChat menghantar pemberitahuan hasil pembayaran ke akaun awam.
  7. Akaun rasmi mengesahkan kesahihan pemberitahuan dan memproses keputusan pembayaran.

Seterusnya, kami akan melaksanakan kod khusus untuk langkah ini.

Dalam langkah pertama, pengguna memulakan permintaan pembayaran dalam akaun rasmi WeChat. Kami perlu menambah butang pembayaran pada antara muka bahagian hadapan dan mencetuskan permintaan pembayaran apabila butang itu diklik. Kod khusus adalah seperti berikut:

<button id="payBtn">支付</button>
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
    document.getElementById('payBtn').addEventListener('click', function() {
        // 调用后端接口获取支付参数
        fetch('/getPayParams.php', {
            method: 'GET'
        })
        .then(response => response.json())
        .then(data => {
            // 调起微信支付界面
            wx.chooseWXPay({
                appId: data.appId,
                timestamp: data.timestamp,
                nonceStr: data.nonceStr,
                package: data.package,
                signType: data.signType,
                paySign: data.paySign,
                success: function(res) {
                    // 支付成功后的操作
                },
                cancel: function(res) {
                    // 用户取消支付
                },
                fail: function(res) {
                    // 支付失败
                }
            });
        });
    });
</script>
Salin selepas log masuk

Dalam kod di atas, kami menggunakan JS-SDK yang disediakan oleh WeChat untuk mencetuskan antara muka pembayaran WeChat dengan memanggil kaedah wx.chooseWXPay.

Pada langkah kedua, akaun rasmi menghantar permintaan pembayaran ke platform pembayaran WeChat. Kami perlu menulis kod pada bahagian belakang yang menerima permintaan pembayaran dan menghantarnya ke platform pembayaran WeChat. Kod khusus adalah seperti berikut:

<?php
// 获取参数
$totalFee = $_GET['totalFee']; // 支付金额,单位为分,例如100表示1元

// 构造请求数据
$data = [
    'appid' => '公众号的AppID',
    'mch_id' => '商户号',
    'nonce_str' => uniqid(), // 随机字符串
    'body' => '支付测试', // 商品描述
    'out_trade_no' => time(), // 商户订单号
    'total_fee' => $totalFee, // 支付金额
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 终端IP
    'notify_url' => '支付结果通知的接收地址',
    'trade_type' => 'JSAPI', // 交易类型
    'openid' => '用户的openid'
];

// 生成签名
$data['sign'] = md5(http_build_query($data) . '&key=商户的Key');

// 将请求数据转为XML格式
$xmlData = '<xml>';
foreach ($data as $key => $value) {
    $xmlData .= "<$key>$value</$key>";
}
$xmlData .= '</xml>';

// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/pay/unifiedorder');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);

// 解析支付结果
$responseData = simplexml_load_string($response, null, LIBXML_NOCDATA);
if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') {
    $prepayId = $responseData->prepay_id; // 获取预支付交易会话标识
    // 构造返回数据
    $returnData = [
        'appId' => '公众号的AppID',
        'timeStamp' => time(),
        'nonceStr' => uniqid(),
        'package' => 'prepay_id=' . $prepayId,
        'signType' => 'MD5'
    ];
    $returnData['paySign'] = md5(http_build_query($returnData) . '&key=商户的Key');

    echo json_encode($returnData);
} else {
    echo '支付请求失败';
}
?>
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mendapatkan jumlah pembayaran dan parameter lain yang diluluskan oleh bahagian hadapan, kemudian membina data permintaan dan menghantar permintaan ke antara muka pesanan bersatu platform pembayaran WeChat melalui cURL. Seterusnya, kami menghuraikan hasil pembayaran dan, jika permintaan pembayaran berjaya, kembalikan ID sesi transaksi prabayar (prepay_id) ke bahagian hadapan.

Langkah ketiga ialah membuka antara muka pembayaran WeChat di bahagian hadapan. Kod sebelumnya telah pun melaksanakan fungsi ini, kami tidak memerlukan kod tambahan.

Langkah keempat ialah platform pembayaran WeChat menghantar pemberitahuan hasil pembayaran ke akaun rasmi. Kami perlu menulis kod pada bahagian belakang akaun rasmi untuk menerima dan memproses pemberitahuan hasil pembayaran. Kod khusus adalah seperti berikut:

<?php
// 接收支付结果通知
$xmlData = file_get_contents('php://input');
$responseData = simplexml_load_string($xmlData, null, LIBXML_NOCDATA);

// 验证通知的有效性
if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') {
    // 处理支付结果
    // do something
    // 返回处理结果给微信支付平台
    echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
} else {
    echo '支付结果通知验证失败';
}
?>
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mendapatkan data XML pemberitahuan hasil pembayaran, kemudian menghuraikan data dan mengesahkan kesahihan pemberitahuan. Jika pengesahan diluluskan, keputusan pembayaran diproses, dan akhirnya hasil pemprosesan dikembalikan ke platform pembayaran WeChat.

Dengan kod di atas, kita boleh menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat. Sudah tentu, dalam proses pembangunan sebenar, faktor seperti keselamatan dan pengalaman pengguna juga perlu dipertimbangkan dan dioptimumkan sewajarnya.

Untuk meringkaskan, menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat memerlukan melengkapkan langkah berikut: tambah butang pembayaran dalam antara muka bahagian hadapan dan cetuskan permintaan pembayaran, bahagian belakang menerima permintaan pembayaran dan menghantarnya kepada platform pembayaran WeChat, dan bahagian hadapan mengaktifkan antara muka pembayaran WeChat, bahagian belakang menerima dan memproses pemberitahuan hasil pembayaran. Melalui pelaksanaan kod langkah-langkah di atas, kami boleh melaksanakan fungsi pembayaran akaun rasmi WeChat dengan mudah.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk membangunkan fungsi pembayaran akaun rasmi WeChat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!