>  기사  >  백엔드 개발  >  PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법

PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법

PHPz
PHPz원래의
2023-10-27 10:57:42671검색

PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법

PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법

모바일 결제의 급속한 발전과 함께 WeChat 결제는 중국의 가장 주류 결제 방법 중 하나로서 많은 기업에서 필요한 결제 방법이 되었습니다. 그리고 개인. WeChat 공개 계정을 개발할 때 결제 기능을 통합할 수 있다면 사용자에게 보다 편리한 결제 방법을 제공하고 기업에 더 많은 혜택을 가져다 줄 것입니다. 이 기사에서는 PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

우선 위챗 공식계정 결제의 기본적인 과정을 이해해야 합니다. 주로 다음 단계로 나뉩니다.

  1. 사용자가 WeChat 공식 계정에서 결제 요청을 시작합니다.
  2. 공식 계정은 WeChat 결제 플랫폼에 결제 요청을 보냅니다.
  3. WeChat 결제 플랫폼은 선불 거래 세션 ID(prepay_id)를 반환합니다.
  4. 공개 계정은 prepay_id를 사용하여 서명을 생성하고 이를 프런트 엔드에 반환합니다.
  5. 프런트 엔드에 WeChat 결제 인터페이스가 표시되고 사용자가 결제 작업을 완료합니다.
  6. WeChat 결제 플랫폼은 공개 계정으로 결제 결과 알림을 보냅니다.
  7. 공식 계정에서는 알림의 유효성을 확인하고 결제 결과를 처리합니다.

다음으로 이러한 단계에 대한 특정 코드를 구현하겠습니다.

첫 번째 단계에서 사용자는 WeChat 공식 계정에서 결제 요청을 시작합니다. 프런트엔드 인터페이스에 결제 버튼을 추가하고 버튼을 클릭하면 결제 요청을 실행해야 합니다. 구체적인 코드는 다음과 같습니다.

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

위 코드에서는 WeChat에서 제공하는 JS-SDK를 사용하여 wx.chooseWXPay 메소드를 호출하여 WeChat 결제 인터페이스를 트리거합니다.

두 번째 단계에서는 공식 계정이 WeChat 결제 플랫폼에 결제 요청을 보냅니다. 결제 요청을 수신하고 이를 WeChat 결제 플랫폼으로 보내는 백엔드에 코드를 작성해야 합니다. 구체적인 코드는 다음과 같습니다.

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

위 코드에서는 먼저 프런트 엔드에서 전달한 결제 금액 및 기타 매개변수를 얻은 다음 요청 데이터를 구성하고 해당 요청을 WeChat 결제 플랫폼의 통합 주문 인터페이스로 보냅니다. cURL을 통해. 다음으로 결제 결과를 파싱하고, 결제 요청이 성공하면 선불 거래 세션 ID(prepay_id)를 프런트 엔드에 반환합니다.

세 번째 단계는 프런트 엔드에서 WeChat 결제 인터페이스를 여는 것입니다. 이전 코드에서는 이미 이 기능을 구현했기 때문에 추가 코드가 필요하지 않습니다.

네 번째 단계는 WeChat 결제 플랫폼이 공식 계정으로 결제 결과 알림을 보내는 것입니다. 결제 결과 알림을 받고 처리하려면 공식 계정 백엔드에 코드를 작성해야 합니다. 구체적인 코드는 다음과 같습니다.

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

위 코드에서는 먼저 결제 결과 알림의 XML 데이터를 얻은 후 데이터를 구문 분석하고 알림의 유효성을 확인합니다. 검증이 통과되면 결제 결과가 처리되고, 최종적으로 처리 결과가 위챗 결제 플랫폼으로 반환됩니다.

위 코드를 사용하여 PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발할 수 있습니다. 물론 실제 개발 과정에서는 보안, 사용자 경험 등의 요소도 고려하고 그에 따라 최적화해야 합니다.

요약하자면, PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하려면 다음 단계를 완료해야 합니다. 프런트엔드 인터페이스에 결제 버튼을 추가하고 결제 요청을 트리거하면 백엔드는 결제 요청을 수신하여 다음으로 보냅니다. WeChat 결제 플랫폼과 프런트 엔드가 WeChat 결제 인터페이스를 활성화하고 백엔드가 결제 결과 알림을 수신하고 처리합니다. 위 단계의 코드 구현을 통해 WeChat 공식 계정의 결제 기능을 쉽게 구현할 수 있습니다.

위 내용은 PHP를 사용하여 WeChat 공식 계정의 결제 기능을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.