微信网页支付jsapi传参问题解决(使用微信官方SDK)

来源:互联网 发布:知乎南方采暖方式 编辑:程序博客网 时间:2024/06/06 00:24

微信支付api真的是各种坑啊

今天一整天都在折腾微信支付jsapi的参数不能通过get,post方式获取的问题!!

微信网页支付在用户点击发起支付前的流程:

问题:用户h5页面输入的参数通过post 或者get的方式传递到商户后台,商户后台无法处理用户传入的参数,并生成商户订单。

原因:在创建商户订单时,需要获取到用户的openid

//①、获取用户openid$tools = new JsApiPay();$openId = $tools->GetOpenid();

public function GetOpenid(){//通过code获得openidif (!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请求函数如下:
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方式获取的参数已经被清空,所以无法生成商户订单。

解决办法:

1.先将用户h5页面提交过来的参数保存到session中,然后再重定向到要生成商户订单的页面JSpay_demo.php,例如:

/* order_demo.php */if(isset($_POST['order'])){        $_SESSION['premoney']=$_POST['premoney'];        Header("Location: JSpay_demo.php");    }

2.然后在生成商户订单的页面中先获取openid,再获取session中的值,例如:
//①、获取用户openid$tools = new JsApiPay();$openId = $tools->GetOpenid();session_start();$premoney=$_SESSION['premoney'];

3.这样就可以获取到想要自定义支付订单的参数的值了,然后再调用统一下单接口。



0 0
原创粉丝点击