Heim  >  Artikel  >  Backend-Entwicklung  >  So entwickeln Sie mit PHP die Zahlungsfunktion des offiziellen WeChat-Kontos

So entwickeln Sie mit PHP die Zahlungsfunktion des offiziellen WeChat-Kontos

PHPz
PHPzOriginal
2023-10-27 10:57:42670Durchsuche

So entwickeln Sie mit PHP die Zahlungsfunktion des offiziellen WeChat-Kontos

So entwickeln Sie mit PHP die Zahlungsfunktion des offiziellen WeChat-Kontos

Mit der rasanten Entwicklung des mobilen Bezahlens ist die WeChat-Zahlung als eine der gängigsten Zahlungsmethoden in China für viele Unternehmen zu einer notwendigen Zahlungsmethode geworden und Einzelpersonen. Wenn bei der Entwicklung eines öffentlichen WeChat-Kontos die Zahlungsfunktion integriert werden kann, bietet dies den Benutzern eine bequemere Zahlungsmethode und bringt dem Unternehmen mehr Vorteile. In diesem Artikel wird erläutert, wie Sie mit PHP die Zahlungsfunktion für offizielle WeChat-Konten entwickeln, und es werden spezifische Codebeispiele bereitgestellt.

Zunächst müssen wir den grundlegenden Prozess der Zahlung auf das offizielle WeChat-Konto verstehen. Es ist hauptsächlich in die folgenden Schritte unterteilt:

  1. Der Benutzer initiiert eine Zahlungsanforderung im offiziellen WeChat-Konto.
  2. Das offizielle Konto sendet die Zahlungsanforderung an die WeChat-Zahlungsplattform.
  3. Die WeChat-Zahlungsplattform gibt die Sitzungs-ID der Vorauszahlungstransaktion (prepay_id) zurück.
  4. Das öffentliche Konto verwendet prepay_id, um eine Signatur zu generieren und diese an das Frontend zurückzugeben.
  5. Das Frontend öffnet die WeChat-Zahlungsschnittstelle und der Benutzer schließt den Zahlungsvorgang ab.
  6. Die WeChat-Zahlungsplattform sendet Benachrichtigungen über Zahlungsergebnisse an das öffentliche Konto.
  7. Das offizielle Konto überprüft die Gültigkeit der Benachrichtigung und verarbeitet die Zahlungsergebnisse.

Als nächstes implementieren wir den spezifischen Code für diese Schritte.

Im ersten Schritt initiiert der Nutzer eine Zahlungsanfrage im offiziellen WeChat-Konto. Wir müssen der Front-End-Schnittstelle eine Zahlungsschaltfläche hinzufügen und eine Zahlungsanforderung auslösen, wenn auf die Schaltfläche geklickt wird. Der spezifische Code lautet wie folgt:

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

Im obigen Code verwenden wir das von WeChat bereitgestellte JS-SDK, um die WeChat-Zahlungsschnittstelle durch Aufrufen der wx.chooseWXPay-Methode auszulösen.

Im zweiten Schritt sendet der offizielle Account die Zahlungsanfrage an die Zahlungsplattform WeChat. Wir müssen Code im Backend schreiben, der Zahlungsanfragen empfängt und an die WeChat-Zahlungsplattform sendet. Der spezifische Code lautet wie folgt:

<?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 '支付请求失败';
}
?>

Im obigen Code erhalten wir zunächst den Zahlungsbetrag und andere vom Frontend übergebene Parameter, erstellen dann die Anforderungsdaten und senden die Anforderung an die einheitliche Bestellschnittstelle der WeChat-Zahlungsplattform über cURL. Als nächstes analysieren wir das Zahlungsergebnis und geben, wenn die Zahlungsanforderung erfolgreich ist, die Sitzungs-ID der Vorauszahlungstransaktion (prepay_id) an das Frontend zurück.

Der dritte Schritt besteht darin, die WeChat-Zahlungsschnittstelle im Frontend zu öffnen. Der vorherige Code hat diese Funktion bereits implementiert, wir benötigen keinen zusätzlichen Code.

Der vierte Schritt besteht darin, dass die WeChat-Zahlungsplattform eine Benachrichtigung über das Zahlungsergebnis an das offizielle Konto sendet. Wir müssen Code in das Backend des offiziellen Kontos schreiben, um Benachrichtigungen über Zahlungsergebnisse zu empfangen und zu verarbeiten. Der spezifische Code lautet wie folgt:

<?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 '支付结果通知验证失败';
}
?>

Im obigen Code erhalten wir zunächst die XML-Daten der Zahlungsergebnisbenachrichtigung, analysieren dann die Daten und überprüfen die Gültigkeit der Benachrichtigung. Wenn die Verifizierung erfolgreich ist, wird das Zahlungsergebnis verarbeitet und schließlich wird das Verarbeitungsergebnis an die WeChat-Zahlungsplattform zurückgegeben.

Mit dem obigen Code können wir PHP verwenden, um die Zahlungsfunktion des offiziellen WeChat-Kontos zu entwickeln. Natürlich müssen im eigentlichen Entwicklungsprozess auch Faktoren wie Sicherheit und Benutzererfahrung berücksichtigt und entsprechend optimiert werden.

Zusammenfassend lässt sich sagen, dass die Verwendung von PHP zur Entwicklung der Zahlungsfunktion des offiziellen WeChat-Kontos die Durchführung der folgenden Schritte erfordert: Fügen Sie eine Zahlungsschaltfläche in der Front-End-Schnittstelle hinzu und lösen Sie eine Zahlungsanforderung aus. Das Back-End empfängt die Zahlungsanforderung und sendet sie an die WeChat-Zahlungsplattform und das Front-End aktiviert die WeChat-Zahlungsschnittstelle, das Backend empfängt und verarbeitet Zahlungsergebnisbenachrichtigungen. Durch die Code-Implementierung der oben genannten Schritte können wir die Zahlungsfunktion des offiziellen WeChat-Kontos problemlos implementieren.

Das obige ist der detaillierte Inhalt vonSo entwickeln Sie mit PHP die Zahlungsfunktion des offiziellen WeChat-Kontos. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn