各位好:
我在進行支付的開發過程中,遇到這樣一個情景:
當我在一個購買商品的方法中,獲得商戶訂單號,商品價格,商品名稱之後,跳轉到支付的方法中去,但因為該方法中需要擷取code, 而擷取code需要跳轉頁面,當擷取到code之後,頁面繼續跳回來,但是這時,我自己傳遞的商戶訂單號,商品價格,商品名稱就已經沒有了,所以這個方法擷取到為空白,導致支付失敗.
希望各位可以幫忙提供下可以解決這個問題的思路,謝謝大家了.
將代碼簡要貼上:
function buyGoods() { // 購買方法 $out_trade_no = "thinks"; $body = "xiexie"; $total_fee = "200"; wxPay($body, $out_trade_no, $total_fee);}/** * 支付方法 */function wxPay($body, $out_trade_no, $total_fee) { $jsApi = new JsApi_pub(); if (!isset($_GET['code'])) { // 觸發返回code $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL); Header("Location:$url"); } else { // 擷取code碼,以此擷取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } $unifiedOrder = new UnifiedOrder_pub(); $unifiedOrder->setParameter("openid","$openid"); $unifiedOrder->setParameter("body", $body);//商品描述 //自訂訂單號,此處僅作舉例 $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 $unifiedOrder->setParameter("total_fee","$total_fee");//總金額 $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易類型 $prepay_id = $unifiedOrder->getPrepayId(); $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); return $jsApiParameters;}
回複內容:
各位好:
我在進行支付的開發過程中,遇到這樣一個情景:
當我在一個購買商品的方法中,獲得商戶訂單號,商品價格,商品名稱之後,跳轉到支付的方法中去,但因為該方法中需要擷取code, 而擷取code需要跳轉頁面,當擷取到code之後,頁面繼續跳回來,但是這時,我自己傳遞的商戶訂單號,商品價格,商品名稱就已經沒有了,所以這個方法擷取到為空白,導致支付失敗.
希望各位可以幫忙提供下可以解決這個問題的思路,謝謝大家了.
將代碼簡要貼上:
function buyGoods() { // 購買方法 $out_trade_no = "thinks"; $body = "xiexie"; $total_fee = "200"; wxPay($body, $out_trade_no, $total_fee);}/** * 支付方法 */function wxPay($body, $out_trade_no, $total_fee) { $jsApi = new JsApi_pub(); if (!isset($_GET['code'])) { // 觸發返回code $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL); Header("Location:$url"); } else { // 擷取code碼,以此擷取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } $unifiedOrder = new UnifiedOrder_pub(); $unifiedOrder->setParameter("openid","$openid"); $unifiedOrder->setParameter("body", $body);//商品描述 //自訂訂單號,此處僅作舉例 $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 $unifiedOrder->setParameter("total_fee","$total_fee");//總金額 $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易類型 $prepay_id = $unifiedOrder->getPrepayId(); $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); return $jsApiParameters;}
我最終是這樣處理的:
$jsApi = new JsApi_pub(); if (!isset($_GET['code'])) { // 觸發返回code $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL); $state = json_encode(array( "body" => $body, "out_trade_no" => $out_trade_no, "total_fee" => "$total_fee", )); $url = str_replace("STATE", $state, $url); Header("Location:$url"); } else { // 擷取code碼,以此擷取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); $state = $_GET['state']; }
在官方給的URL中有這麼個參數state,預設值是STATE,只需要將STATE替換成你所需要的內容就可以了。
$state = $_GET['state'];之後呢,怎樣把這三個參數分解出來!求大神解答!
前幾天我也在開發支付也遇到這個問題了
原本擷取code的這個連結是
const JS_API_CALL_URL = 'http://xxxxxx.cn/?c=WeixinBack&a=js_api_call_url';
發現只能擷取c,a這個參數擷取不到。
解決辦法:
const JS_API_CALL_URL = 'http://xxxxxx.cn/?c=WeixinBack|js_api_call_url|...
只能帶一個參數就把所有的參數組合成一個字串帶上了
然後在伺服器上重寫一個規則,將連結寫成原本的格式。
你是怎麼解決的呢,我也遇到這個問題現在,我用thinkphp
我使用的方法,在一切業務開始之前,先擷取到openId然後存到session裡。
然後開始商務邏輯,這時候,因為你的所有的個人資訊都已經在session裡了,所以就不會有任何的跳轉問題。
認真看一下支付的文檔,發現是可以傳遞參數的~ 現在發現另外一個問題:
就是支付完成後,用js寫的location.href 不能跳回支付成功的頁面,有遇到這個問題的嗎??? 又是咋解決的嘞?
$state = $_GET['state'];之後呢,怎樣把這三個參數分解出來