Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert die gemeinsame Nutzung von Zahlungscodes für das WeChat-Applet
Die Funktion von PHP ist sehr leistungsfähig. In diesem Artikel teilen wir Ihnen hauptsächlich die PHP-Backend-Implementierung des WeChat-Applet-Zahlungscodes mit: relativ einfach, stellen Sie einfach eine Netzwerkanfrage für die entsprechende Zahlung Veranstaltung:
WeChat Mini-Programm Zahlungs-Backend PHP (2)
view_moneysure:function(){ var code = this.data.code; console.log('code是' +code) wx.request({ url: 'https://...com/pay.php',//这个链接是后端写的 header: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: { code: code, }, method: 'POST', success: function (response) { console.log( response.data); // 发起支付 wx.requestPayment({ 'appId': response.data.appId, 'timeStamp': response.data.timeStamp, 'nonceStr': response.data.nonceStr, 'package': response.data.package, 'signType': 'MD5', 'paySign': response.data.paySign, 'success': function (res) { wx.showToast({ title: '支付成功' }); console.log(res); }, 'fail': function (res) { console.log(res) } }); }, fail: function (res) { console.log(res) } }) },
Backend-Code:
1 Miniprogramm
e16c3c8897157dbebcecebd11889006eSetBody("testceshi"); // 订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳 $input->SetOut_trade_no(time().''); // 费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱 $input->SetTotal_fee("1"); $input->SetNotify_url("https://...com/notify.php");//需要自己写的notify.php $input->SetTrade_type("JSAPI"); // 由小程序端传给后端或者后端自己获取,写自己获取到的, $input->SetOpenid('UdhncondJcnkJnjknkcssdcAbckn'); //$input->SetOpenid($this->getSession()->openid); // 向微信统一下单,并返回order,它是一个array数组 $order = WxPayApi::unifiedOrder($input); // json化返回给小程序端 header("Content-Type: application/json"); echo $this->getJsApiParameters($order); } private function getJsApiParameters($UnifiedOrderResult) { //判断是否统一下单返回了prepay_id if(!array_key_exists("appid", $UnifiedOrderResult) || !array_key_exists("prepay_id", $UnifiedOrderResult) || $UnifiedOrderResult['prepay_id'] == "") { throw new WxPayException("参数错误"); } $jsapi = new WxPayJsApiPay(); $jsapi->SetAppid($UnifiedOrderResult["appid"]); $timeStamp = time(); $jsapi->SetTimeStamp("$timeStamp"); $jsapi->SetNonceStr(WxPayApi::getNonceStr()); $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); $jsapi->SetSignType("MD5"); $jsapi->SetPaySign($jsapi->MakeSign()); $parameters = json_encode($jsapi->GetValues()); return $parameters; } //这里是服务器端获取openid的函数 // private function getSession() { // $code = $this->input->post('code'); // $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.WxPayConfig::APPID.'&secret='.WxPayConfig::APPSECRET.'&js_code='.$code.'&grant_type=authorization_code'; // $response = json_decode(file_get_contents($url)); // return $response; // } } $WxPay = new WXPay(); $WxPay->index();
2. WeChat SDK-Download-Link: https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip
Entpacken Sie es und Sie können es im lib-Ordner sehen:
in einem Verzeichnis, auf das der Server zugreifen kann.
Konfigurieren Sie die Kontoinformationen in WxPayConfig.php:
class WxPayConfig { //=======【基本信息设置】===================================== // /** * TODO: 修改这里配置为您自己申请的商户信息 * 微信公众号信息配置 * * APPID:绑定支付的APPID(必须配置,开户邮件中可查看) * * MCHID:商户号(必须配置,开户邮件中可查看) * * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置) * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert * * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置), * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN * @var string */ const APPID = 'wx123456789...';//这里填上自己的对应信息 const MCHID = '14151666888'; const KEY = '11223344556677889900'; const APPSECRET = '828bfsdibfsiubfikdbfik'; const NOTIFY_URL='https://...com/notify.php';
Hinweis:
ist während des Zeitraums ein Signaturfehler aufgetreten, der fehlerhaft war. Verwenden Sie die WeChat-Zahlungsschnittstelle Zur Signaturüberprüfung ist nichts auszusetzen. Wie im Internet erwähnt, habe ich alle ausgelassenen und falsch geschriebenen Parameter überprüft, aber es kommt immer wieder
<return_code><![CDATA[FAIL]]></return_code>
f16c3d567c0a38e370f47bbcf068db5afc2b02ee40f210fdfbaeb7b83d80a61a440a851afc4e996b6e6f596aa1bd9ef7
这样的信息,最后解决办法是:重置了KEY (商户支付密钥),重置的和之前的一模一样,但竟然就可以了...
. Das Hauptproblem besteht darin, dass der Signaturfehler gemeldet wird, z. B. das XML-Format ist falsch, die Anzahl der Ziffern nach der MD5-Verschlüsselung ist nicht richtig angeordnet, Parameter fehlen usw
https://pay.weixin.qq.com/wiki/doc/api/wxa /wxa_api.php?chapter=9_1&index=1556a161260bec1428838790e9353da41SetTransaction_id($transaction_id); $result = WxPayApi::orderQuery($input); if(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS") { return true; } return false; } //重写回调处理函数 public function NotifyProcess($data, &$msg) { $notfiyOutput = array(); if(!array_key_exists("transaction_id", $data)){ $msg = "输入参数不正确"; return false; } //查询订单,判断订单真实性 if(!$this->Queryorder($data["transaction_id"])){ $msg = "订单查询失败"; return false; } return true; } } $notify = new PayNotifyCallBack(); $notify->Handle(false);Hinterlassen Sie gerne eine Nachricht zum Austausch von Korrekturen! Verwandte Empfehlungen:
PHP-Implementierungs-App zum Aufrufen des Alipay-Zahlungscodes
Entwicklungsbeispiel der PHP-UnionPay-Online-Zahlungsschnittstelle
Aktivieren Sie WeChat-Scancode-Zahlung und PHP-Code-Sharing
Das obige ist der detaillierte Inhalt vonPHP implementiert die gemeinsame Nutzung von Zahlungscodes für das WeChat-Applet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!