thinkphp 中 Home/OrderController/order为微信支付方法;
微信端支付配置对应下面的三个图:



1.JS接口安全域名:www.wcc.com
2.支付授权目录为:www.wcc.com/index.php/Home/Order/order
3.网页授权域名为:www.wcc.com
微信支付配置:

OrderController/order方法如下:
//使用jsapi接口
$jsApi = new \JsApi_pub();
//=========步骤1:网页授权获取用户openid============
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
$urlsss = \WxPayConf_pub::JS_API_CALL_URL;
$rUrl=urlencode($urlsss.'/id/'.$_GET[id]);
/*注意一下这个 id 是为了可以成功的传个 id值才这样写 如果你不需要的话也可以直接写成
$rUrl=urlencode(C('WxConfig.JS_API_CALL_URL'));
$this->redirect('WxJsAPI/jsApiCall',array('id' =>55),0, '页面跳转中...');
我是这样穿这个id过来的值得你们也可以自己改成其他的来传这个id 或是删除他不要
*/
$url = $jsApi->createOauthUrlForCode($rUrl);
Header("Location: $url");
}else{
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();//openid 这里是为了获取用户当前的openid 如果你有做微信登陆的话就可以无视他。
}
//=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$jsApi = new \JsApi_pub();
$unifiedOrder = new \UnifiedOrder_pub();
//此处做数据库的查询 这里操作数据库把产品信息显示出来
//此处做数据库的查询 这里操作数据库把产品信息显示出来
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
//
$NOTIFY_URL="www.wcc.com/index.php/Home/WxJsAPI/notify";
$unifiedOrder->setParameter("openid",$openid);//openid
$unifiedOrder->setParameter("body",'青岛大虾');//商品描述
$unifiedOrder->setParameter("out_trade_no",'123456789');//商户订单号
$unifiedOrder->setParameter("total_fee",0.01*100);//总金额 微信的钱1*100等于1
$unifiedOrder->setParameter("notify_url",$NOTIFY_URL);//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
$prepay_id = $unifiedOrder->getPrepayId();
// echo $prepay_id;exit();
//=========步骤3:使用jsapi调起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
$WEB_HOST='www.wcc.com';//填写的话 如 http://nicaicai.imwork.net 最后面不用加 /
$this->assign('HOSTS',$WEB_HOST);
$this->assign('jsApiParameters',$jsApiParameters);
dump($jsApiParameters);exit;dump打印出来的数据经过整理如下:"appId":"wx4***************2b4",
"timeStamp":"147********",
"nonceStr":"u8wtg******************9tlvu9z8",
"package":"prepay_id=wx20161111111111**********",
"signType":"MD5",
"paySign":"5AA03B1******************E06A2B35"
微信支付js 调用如下:
function jsApiCall() {
var jsapi = '{$jsApiParameters}';
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
jsapi,
function(res) {
WeixinJSBridge.log(res.err_msg);
alert(res.err_msg);
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付成功");
window.location.href = '__URL__/success_pay?id={$order_no}';
} else {
alert("支付失败");
window.location.href = '__APP__/';
}
}
);
}
function callpay() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
} else {
jsApiCall();
}
}
</script>最后点击支付的时候返回get_brand_wcpay_request:fail请问大神们,我的错在什么地方啊???我找了好久都没有发现错在什么地方。。是不是我微信支付配置错了。。我在网上找了好久,上面大家都是这么配置的。请求帮助。
最佳答案