php微信支付(僅pc端掃碼支付模式二)詳細步驟
https://segmentfault.com/a/1190000008606526
一.
首先你們公司開通微信支付功能後,會收到一份郵件,裡面有賬戶相關資訊,一般有:微信支付商戶號,商戶平臺登入帳號,商戶平臺登入密碼,申請對應的公眾號,公眾號APPID。
1.下載demo:用上面資訊登陸“微信商戶平臺”,>>>(右上角開發文件)>>>公眾號支付>>>sdk下載>>>選php
2.下載證書:賬戶中心>>>api安全
將下載的證書中的所有檔案解壓到demo的cert資料夾中(demo原先自帶的要刪掉),然後修改demo中lib/WxPay.Config.php中的以下配置
const APPID = '郵件中有,即`公眾號APPID`'; const MCHID = '郵件中有,即`微信支付商戶號`'; const KEY = 'wxpay.config.php中註釋有相關連結'; const APPSECRET = '公眾平臺開發者中心設定,同樣註釋中有連結';
3.配置好後去微信公眾平臺,裡面有微信支付功能如下圖.在開發配置中設定支付目錄和測試目錄.這裡主要是配置測試目錄,支付目錄可以先不管(我的域名是www.test.com),然後將自己的微訊號加入測試白名單.
4.再去微信公眾平臺>>>開發>>>介面許可權>>>網頁服務的第一項`網頁賬號`,修改它的值為你自己的域名(僅僅是域名).如圖:
二.demo程式碼修改(僅僅針對當前的版本)
1. 修改檔案WxPay.Api.php
將curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗
改為:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//嚴格校驗2
2.(針對jsapi)如果訪問jsapi.php時你要用get方式傳遞引數,那麼你要去修改WxPay.JsapiPay.php中的
$baseUrl =urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
改為:
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
或者在寫連結時寫兩個??傳參,例如:http://www.test.com/demo/example/jsapi.php??id=xxx&..
3.刪去wxpay.notify.php中的ReplyNotify函式中$this->GetReturn_code(‘引數’) == "SUCCESS"裡面的’引數’.
4.在native.php中新增$notify=new NativePay();如圖:
5.註釋掉native.php中模式一相關的程式碼.
三.開始開發,按大概流程講述.
1.首先點選支付後,會到native.php檔案中去,他會設定一大堆引數,然後處理完畢能得到一個url連結,如圖:
將裡面的setNotify_url設定為你的native_notify.php檔案所在的位置.
其中的setOut_trade_no和setTotal_fee和setProduct_id這三個引數是你可以隨便填寫的(其他引數預設就可以).在支付成功後微信伺服器會將這兩個引數的值返回給你.我是直接將商品訂單號碼放到setOut_trade_no中,將商品的id放到setProduct_id中傳遞過去.
以上都設定好後再請求native.php時,應該可以得到一個二維碼了.
2.掃碼支付完成後,微信伺服器會自動請求你的native_notify.php檔案.請求進入後直接通過最後一句$notify->Handle(true);跳到了WxPay.Notify.php中,然後還呼叫了很多其他函式,
後面的邏輯和jsapi支付一樣的(我先做的jsapi支付),這裡就不提了.
四.支付後跳轉
支付完成後,手機提示支付成功,並會顯示支付資訊,但是pc端的二維碼頁面卻不會跳轉.這需要我們自己在native.php頁面設定一個定時器,我直接設定為跳轉到百度.你設定為自己想要跳轉到的頁面路徑即可.大致程式碼如圖:
其中的$order_id是get傳過來的訂單號.通過查詢訂單號對應商品的支付狀態判斷是否成功,然後跳轉.
至此,一個掃碼支付流程大致走完了.