1. 程式人生 > >php微信支付(僅pc端掃碼支付模式二)詳細步驟

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傳過來的訂單號.通過查詢訂單號對應商品的支付狀態判斷是否成功,然後跳轉.

至此,一個掃碼支付流程大致走完了.