微信公众号支付JSAPI网页,total_fee错误不正确,header重定向参数丢失,无法获取订单号和金额解决

微信公众号支付官方demo错误,

公众号支付只能用在微信里,也就是微信内部浏览器.

1.到WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode($redirectUrl)方法, 第二个参数
改为 $urlObj["redirect_uri"] = urlencode($redirectUrl); //对$url变量进行url编码 不然header重定向时无法获取订单号和金额

2.wx.jsapi.php这个文件在header重定向后,get,post等方式传递的参数就没有了,不过重定向的URL里面有个STATE,可以把数据放里面,就OK了.具体看代码.

文件为wx.jsapi.php

if (!isset($_GET['code']))
{
//触发微信返回code码
$url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
//重定向的URL里面有个STATE,把GET到的数据参数放在一个数组后转换成json格式的字符串
$state = json_encode(array(
"bill_no" => $data["bill_no"], //订单号
"title" => $data["title"], //标题
"return_url" => $data["return_url"], //返回地址
"total_fee" => $data["total_fee"] //金额
));
//替换这个STATE
$url = str_replace("STATE", $state, $url);
//重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
Header("Location: $url");
} else {
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
$state = $_GET['state'];
$state = str_replace("\\", "", $state); //去掉\\要不解析不了
$param = json_decode($state, true); //解析
$data["bill_no"] = $param['bill_no']; //订单号
$data["total_fee"] = $param['total_fee']; //金额
$data["title"] = $param['title']; //标题
$data["return_url"] = $param['return_url']; //返回地址
}
$data["openid"] = $openid;
上一篇:利用蒙特卡洛(Monte Carlo)方法计算π值[ 转载]


下一篇:略谈Android之Intent