轉載【微信支付】jsapi支付之傳參問題(使用微信官方SDK之PHP版本) V3之WxpayPubHelper 親測有效,V3WxpayAPI_php_v3.zip版未測試,理論上也是同樣的。

本文轉載至: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

相關文章
相關標籤/搜索