微信支付 傳遞自訂參數

來源:互聯網
上載者:User
各位好:
我在進行支付的開發過程中,遇到這樣一個情景:

當我在一個購買商品的方法中,獲得商戶訂單號,商品價格,商品名稱之後,跳轉到支付的方法中去,但因為該方法中需要擷取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'];之後呢,怎樣把這三個參數分解出來

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.