一、有言在先
1、俺家公众号开通微信支付时间是9月22号,所以适用文档版本号是v3.3.6,当时一不小心从微信客服那里拿到一个v2.7的文档,扑腾了1天时间,从一个个水坑里爬出来又跌入尿坑,把人坑惨了,后面找到相关人士才拿到真相,不过现在公众平台也可以下载到了~希望大家伙绕开这个坑!
2、最重要一点:此文有软广告嫌疑,慎入!先帮朋友们把评论写在这里~~~
二、需要到这些地方去扒参数
1、登录微信公众号管理后台mp.weixin.qq.com,在左侧菜单栏找到开发者中心,点开如下图就能看到AppID和AppSecret:
2、在微信支付通过之后,财付通会发3封邮件到申请人邮箱中,俺家之前开通过财付通的账户用于主站支付接口, 不过这次又新发了一个财付通账号,不过让人惊喜的是这次微信支付免了保证金,不知为啥?
点开weixinpay那封邮件就可以看到这些账号信息,把附件中pem格式的文件下载保存到web服务器上,请记下文件绝对路径,在下面代码中需要用到:
3、登录微信商户平台(mch.weixin.qq.com),去设置商户支付密钥Key:
4、登录微信公众号管理后台mp.weixin.qq.com,设置支付配置,支付测试,支付白名单
三、找到参数来配置该个类class WxPayConf
class WxPayConf
{
//=======【基本信息设置】=====================================
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
const APPID = "填上二、1中看到的AppID";
//受理商ID,身份标识
const MCHID = "填上二、2中看到的MCHID";
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看(如果没有,可以登录微信商户平台去设置)
const KEY = "填上二、3中设置的密钥";
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
const APPSECRET = "填上二、1中看到的AppSecret";
//=======【JSAPI路径设置】===================================
//获取access_token过程中的跳转uri,通过跳转将code传入jsapi支付页面
const JS_API_CALL_URL = "http://www.xxx.com/wxpay/js_api_call.php";
//=======【证书路径设置】=====================================
//证书路径,注意应该填写绝对路径
const SSLCERT_PATH = "填上二、2中下载的pem文件放在服务器上的路径";
const SSLKEY_PATH = "填上二、2中下载的pem文件放在服务器上的路径";
//=======【异步通知url设置】===================================
//异步通知url,商户根据实际开发过程设定
const NOTIFY_URL = http://www.xxxx.com/wxpay/notify_url.php;
}
四、JSAPI支付
微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。
下面代码是微信官方提供的JS API支付demo
include_once("WxPayHelper/WxPayHelper.php");
//使用jsapi接口$jsApi = new JsApi();//=========步骤1:网页授权获取用户openid============//通过code获得openidif(!isWeixin()){ echo "请在微信内扫描二维码"; exit;}if (!isset($_GET['code'])){ //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(WxPayConf::JS_API_CALL_URL."); Header("Location: $url");}else{ //获取code码,以获取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } if(empty($order)){ echo "数据错误!"; exit; }}//=========步骤2:使用统一支付接口,获取prepay_id============//使用统一支付接口$unifiedOrder = new UnifiedOrder();//设置统一支付接口参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//spbill_create_ip已填,商户无需重复填写//sign已填,商户无需重复填写$unifiedOrder->setParameter("openid","$openid");//商品描述$unifiedOrder->setParameter("body","test");//商品描述//自定义订单号,此处仅作举例$timeStamp = time();$out_trade_no = timeStamp;$total_fee = 1;$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号$unifiedOrder->setParameter("total_fee",$total_fee);//总金额$unifiedOrder->setParameter("notify_url",WxPayConf::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();//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);$jsApiParameters = $jsApi->getParameters();function isWeixin(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $is_weixin = strpos($agent, 'micromessenger') ? true : false ; if($is_weixin){ return true; }else{ return false; }}?><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>微信安全支付</title><script type="text/javascript"> //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); //alert(res.err_code+res.err_desc+res.err_msg); } ); } 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></head><body onload=""></br></br></br></br><div align="center"><button style="width: 210px; height: 30px; background-color: #FE6714; border: 0px #FE6714 solid; cursor: pointer; color: white; font-size: 16px;" type="button" onclick="callpay()">贡献一下</button></div></body></html>