phpcms 微信支付流程
阿新 • • 發佈:2019-02-06
公司專案版本迭代,有了新需求,之前的微信支付是點選按鈕,直接生成訂單的同時請求微信授權,然後重定向在連結裡就有了code從而可以獲取使用者openid。
新需求是 下訂單的時候新增讓使用者選擇收貨地址,並且支付完成以後,訂單資訊包含使用者的收貨資訊。
上一版本的支付是點選購買直接生成訂單號,然後付款。這個流程中,使用者不用填寫任何資訊。新版本需要新增使用者收貨地址,則變更為 點選購買->填寫相關資訊->提交訂單->生成訂單號->付款。
1.點選購買,引入模版,顯示商品相關資訊。
2.提交訂單,這時使用者的地址已經選擇好,提交的資訊應該包含商品資訊,構造好的微信支付引數,使用者資訊,訂單資訊,這一步進行微信授權獲取使用者的openid為下一步支付做準備。
3.提交訂單後引入支付模版,使用者點選支付,呼叫js進行支付,支付完成後,會呼叫支付回撥地址。
4.支付後的回撥地址要在微信公眾平臺配置。
這是第一次寫微信支付,記錄一下思路。
遇到的主要問題就是 請求微信授權獲取openid會重定向,重定向會丟失post的內容,重定向的url拼接的也不對,不過後來都解決了。
重定向拼接的url不對的問題在於 WxPay.JsApiPay.php 中
/** * * 通過跳轉獲取使用者的openid,跳轉流程如下: * 1、設定自己需要調回的url及其其他引數,跳轉到微信伺服器https://open.weixin.qq.com/connect/oauth2/authorize * 2、微信服務處理完成之後會跳轉回使用者redirect_uri地址,此時會帶上一些引數,如:code * * @return 使用者的openid */ public function GetOpenid() { //通過code獲得openid if (!isset($_GET['code'])){ //觸發微信返回code碼 $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //獲取code碼,以獲取openid $code = $_GET['code']; $openid = $this->getOpenidFromMp($code); return $openid; } }
去掉上述程式碼中$baseurl的最後一個 $_SERVER['QUERY_STRING'] 即可