1.微信支付需要在微信商户平台设置支付目录 这个支付目录可以设置五个,必须要设置这个否则无法发起支付
这个域名可以不用写的模块控制器 直接域名加上一个/即可 注意结束一定是以/结束
2.想要发起支付还必须获取到绑定商户平台的微信openid,这个是调起支付的必要参数
需要登录微信公众平台 找到接口权限------->
吧网页授权域名修改成你的业务域名即可
3.下载微信官方的sdk 根据需要封装一下
在wxpayconfig里填写参数
在wxpayjsapipay里设置获取用户openid的回调网址 此处注意回调域名必须要与当前页面的url地址一样 如果有拼接参数的地方一定要吧相应的参数拼接上 否则获取不到用户的openid 完成不了支付
public function GetOpenid($resident_code,$open_id)
{
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
// $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
$baseUrl = urlencode('https://********/posthouse/index/index?resident_code='.$resident_code.'&open_id='.$open_id);
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location:$url");
exit();
} else {
//获取code码,以获取openid
$code = $_GET['code'];
$openid = $this->getOpenidFromMp($code);
// var_dump($openid);exit;
return $openid;
}
}
4.生成预支付参数
此处要注意 生成签名需要以上参数 可以使用签名调试工具测试生成的签名是否正确
参与签名参数为:appId、timeStamp、nonceStr、package、signType,请注意参数大小写。
将生成的预支付参数传到前端调起支付
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入
"timeStamp":"1395712654", //时间戳,自1970年以来的秒数
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", //微信签名方式:
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
如果你支付时遇见问题需要注意的几点
1.后台设置网页授权域名,商户平台设置支付授权目录
2.签名,参数区分大小写,签名校验是回调域名要设置对