本文轉載至:http://blog.csdn.net/geeklx/article/details/51146151php
(微信支付如今分爲v2版和v3版,2014年9月10號以前申請的爲v2版,以後申請的爲v3版。V3版的微信支付沒有paySignKey參數。)web
寫在最前面: V3 WxpayPubHelper 親測有效,最新版本(WxpayAPI_php_v3.zip)未測試,理論上也是同樣的。api
微信支付api真的是各類坑啊微信
今天一成天都在折騰微信支付jsapi的參數不能經過get,post方式獲取的問題!!session
微信網頁支付在用戶點擊發起支付前的流程:app
問題:用戶h5頁面輸入的參數經過post 或者get的方式傳遞到商戶後臺,商戶後臺沒法處理用戶傳入的參數,並生成商戶訂單。函數
緣由:在建立商戶訂單時,須要獲取到用戶的openid工具
//①、獲取用戶openid $tools = new JsApiPay(); $openId = $tools->GetOpenid();
public function GetOpenid() { //經過code得到openid if (!isset($_GET['code'])){ //觸發微信返回code碼 $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //獲取code碼,以獲取openid $code = $_GET['code']; $openid = $this->getOpenidFromMp($code); return $openid; } }
可是在獲取用戶openid的過程當中須要請求CODE,CODE請求函數以下:post
private function __CreateOauthUrlForCode($redirectUrl) { $urlObj["appid"] = WxPayConfig::APPID; $urlObj["redirect_uri"] = "$redirectUrl"; $urlObj["response_type"] = "code"; $urlObj["scope"] = "snsapi_base"; $urlObj["state"] = "STATE"."#wechat_redirect"; $bizString = $this->ToUrlParams($urlObj); return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; }
所以,在獲取openid商戶後臺與微信系統進行屢次交互,當再次回到生成商戶訂單頁的時候,咱們以前從h5頁面經過$_GET或者$_POST方式獲取的參數已經被清空,因此沒法生成商戶訂單。(甚至報錯500)測試
1.先將用戶h5頁面提交過來的參數保存到session中,而後再重定向到要生成商戶訂單的頁面JSpay_redirect.php,例如:
/* order_redirect.php */ if(isset($_POST['order'])){ //將所須要的訂單id,金額等信息放在全局session中
session_start();
$_SESSION['premoney']=$_POST['premoney']; ... Header("Location: JSpay_redirect.php"); }
2.而後在生成商戶訂單的頁面中先獲取openid,再獲取session中的值,例如:
//①、獲取用戶openid $tools = new JsApiPay(); $openId = $tools->GetOpenid(); session_start(); $premoney=$_SESSION['premoney'];
3.這樣就能夠獲取到想要自定義支付訂單的參數的值了,而後再調用統一下單接口。
一、在微信web開發者工具中一直提示:
緣由未知,很蛋疼。(解決辦法:直接無視,繼續你華麗的腳步)
二、在微信web開發者工具中,點擊callpay()對應的按鈕,調用微信內置的jsapi接口報錯:
然而在實際手機微信操做,卻調用jsapi成功,且能支付、回調成功。緣由是開發者工具bug(maybe)。
感謝CSDN的GeeKLV,連接:
http://blog.csdn.net/geeklx/article/details/51146151