모바일 인터넷의 발전으로 WeChat은 사람들의 삶에 없어서는 안될 부분이 되었고 점점 더 많은 판매자가 WeChat 플랫폼에서 비즈니스를 수행하기로 선택했습니다. WeChat 결제 기능 구현은 판매자에게 매우 필요합니다. 이 기사에서는 PHP를 사용하여 JSAPI 결제를 구현하는 방법을 소개합니다.
먼저 JSAPI 결제가 무엇인지 이해해야 합니다. JSAPI는 WeChat 공식 계정의 일종의 결제 기능으로, JS를 통해 WeChat 결제 인터페이스를 호출하여 결제를 실현합니다. JSAPI 결제의 장점은 사용자가 다른 페이지로 이동할 필요 없이 WeChat에서만 결제하면 된다는 점이며 이는 더욱 편리합니다.
다음으로 준비해야 할 것은
위의 준비를 모두 마친 후, 위챗 통합결제 API의 PHP SDK를 다운로드 해야 합니다. GitHub에서 "wechatpay-GuzzleHttp"를 검색하신 후 다운로드 하시면 됩니다. 프로젝트의 루트 디렉터리에 있습니다.
다음으로 JSAPI 결제를 구현하기 위한 PHP 코드를 작성해야 합니다. 먼저 파일을 도입해야 합니다.
require_once 'wechatpay-GuzzleHttp/autoload.php'; use WeChatPayGuzzleMiddlewareUtilPemUtil; use WeChatPayGuzzleMiddlewareWeChatPayMiddleware; use GuzzleHttpClient; use GuzzleHttpHandlerStack;
그런 다음 관련 매개변수를 설정하고 GuzzleHttpClient 객체를 생성해야 합니다.
// 设置相关参数 $appid = "xxxxxxxxx"; // 微信支付的应用ID(APPID) $mchid = "xxxxxxxxx"; // 商户号(MCHID) $apiKey = "xxxxxxxxx"; // APISecret密钥 $notifyUrl = "http://example.com/notify.php"; // 异步通知URL // 创建GuzzleHttpClient对象 $stack = HandlerStack::create(); $privateKey = PemUtil::loadPrivateKey('file://path/to/your/key.pem'); // 加载私钥文件 $wechatpayMiddleware = WeChatPayMiddleware::builder() ->withMerchant($appid, $mchid, $apiKey) ->withNotifyUrl($notifyUrl) ->withKey($privateKey) ->build(); $stack->push($wechatpayMiddleware, 'wechatpay'); $client = new Client(['handler' => $stack, 'verify' => false]);
위 코드에서는 타사 PHP 라이브러리 "wechatpay-GuzzleHttp"를 사용합니다. 미들웨어를 통해 요청 및 응답 처리를 구현하여 WeChat 결제 API를 캡슐화합니다.
그런 다음 사용자의 openid를 가져오는 코드를 작성해야 합니다.
// 获取用户的openid $code = $_GET['code']; // 通过微信OAuth2.0授权获取的code $accessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code"; $accessTokenResponse = $client->get($accessTokenUrl); $accessTokenBody = $accessTokenResponse->getBody()->getContents(); $accessToken = json_decode($accessTokenBody, true)['access_token']; $openid = json_decode($accessTokenBody, true)['openid'];
위 코드에서는 OAuth2.0 인증을 통해 사용자의 access_token 및 openid를 가져오고 후속 결제 프로세스에서는 openid를 사용해야 합니다.
마지막으로 JSAPI 결제 코드를 작성해야 합니다.
// 支付 $request = $client->request('POST', 'https://api.mch.weixin.qq.com/pay/unifiedorder', [ 'xml' => [ 'body' => '商品描述', 'out_trade_no' => '商户订单号', 'fee_type' => 'CNY', 'total_fee' => '1', 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], 'notify_url' => $notifyUrl, 'trade_type' => 'JSAPI', 'openid' => $openid, 'sign_type' => 'MD5', 'nonce_str' => uniqid(), 'appid' => $appid, 'mch_id' => $mchid, ], ]); $response = $request->getBody()->getContents(); $xml = simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA); $resultCode = json_decode(json_encode($xml), true)['result_code']; if ($resultCode == 'SUCCESS') { $prepayId = json_decode(json_encode($xml), true)['prepay_id']; $jsapiConfig = [ 'appId' => $appid, 'timestamp' => time(), 'nonceStr' => uniqid(), 'package' => "prepay_id={$prepayId}", 'signType' => 'MD5', ]; $jsapiConfig['paySign'] = sign($jsapiConfig, $apiKey); // 生成签名 $jsapiConfig['debug'] = true; // 开启调试模式 $jsapiConfigJson = json_encode($jsapiConfig); $jsapi = <<<EOF <script> wx.config({}); // 微信JS-SDK配置 wx.ready(function() { wx.chooseWXPay({ timestamp: '{$jsapiConfig['timestamp']}', nonceStr: '{$jsapiConfig['nonceStr']}', package: '{$jsapiConfig['package']}', signType: '{$jsapiConfig['signType']}', paySign: '{$jsapiConfig['paySign']}', success: function(res) { // 支付成功调用的函数 }, fail: function(res) { // 支付失败调用的函数 } }); }); </script> EOF; echo $jsapi; // 输出JSAPI支付代码 } // 生成签名 function sign($data, $apiKey) { ksort($data); $query = urldecode(http_build_query($data) . "&key={$apiKey}"); return strtoupper(md5($query)); }
위 코드에서는 WeChat JS-SDK의 "chooseWXPay" 기능을 사용하여 결제 기능을 구현합니다. 구체적으로 WeChat Pay 통합 주문 API를 호출하여 선불 거래 세션 ID(prepay_id)를 얻은 다음 생성된 jsapi 매개변수를 chooseWXPay 함수에 전달하여 결제를 위한 WeChat 결제 인터페이스를 호출합니다.
이 시점에서 JSAPI 결제를 성공적으로 구현했습니다. 요약하면, JSAPI 결제를 구현하려면 다음 단계를 완료해야 합니다.
이 글의 소개가 PHP 개발자가 JSAPI 결제 기능을 빠르게 구현하는 데 도움이 되기를 바랍니다.
위 내용은 PHP WeChat 개발: JSAPI 결제 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!