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

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

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

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

问题:用户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请求函数如下:
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.这样就可以获取到想要自定义支付订单的参数的值了,然后再调用统一下单接口。



你可能感兴趣的:(微信支付问题)