网上找到的公众号微信支付好多乱七八糟的内容,过时代码什么样的都有,虽然很乱但还是看了一遍(无奈)。
接下来是我的总结实践:
该篇为测试篇:并未配置对应的支付目录,所以会报当前页面的URL未注册,不影响测试。
先下载SDK压缩包然后解压,在商户后台找到相关内容配置好config目录下config.json里的api_key_live,api_key_test和rsa_private_key。
将SDK解压包中adapay_sdk_php_v1.4.4上传到网站根目录app目录下,再浅浅的改个简单名字,比如我直接改sdk。
在对接前端页面写相关js(可参考发起支付(JS));
前端预览:
前端请求方法1如下:
<div class='fui-list pay-btn wx2' >
<div class='xxx'>
<img src="xxxx/微信照片.png" alt="">
</div>
<div class='fui-list-inner'>
<div class="title">
微信支付2
</div>
<div class="xxx">
<img src="小图标.png" alt="" style="样式">微信安全支付
</div>
</div>
</div>
<script language='javascript'>
$('.wx2').click(function(){
$.getJSON("http://xxxxx网站?i=x&c=entry&m=xxx&do=xxx&r=相关php.xxx方法",{
ordersn: "{$order['ordersn']}"相关传参}, function(res){
if(res.status=='1') {
//下面alert用来测试是否返回相关数据
alert("timeStamp:"+res.data.timeStamp);
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": res.data.appId,
"timeStamp": res.data.timeStamp,
"nonceStr": res.data.nonceStr,
"package": res.data.package,
"signType": "RSA",
"paySign": res.data.paySign //微信签名
},
function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
}else{
alert('支付失败!');
}
});
}else{
alert("请求失败!");
}
});
})
</script>
前端请求方法2如下:
<div class='fui-list pay-btn wx2' >
<div class='xxx'>
<img src="xxxx/微信照片.png" alt="">
</div>
<div class='fui-list-inner'>
<div class="title">
微信支付2
</div>
<div class="xxx">
<img src="小图标.png" alt="" style="样式">微信安全支付
</div>
</div>
</div>
<script language='javascript'>
$('.wx2').click(function(){
$.ajax({
type: 'GET',
url: 'http://xxxxx网站?i=x&c=entry&m=xxx&do=xxx&r=相关php.xxx方法',
dataType: "json",
data: {
order_sn: "{$order['ordersn']}"//传参给后台查表
},
success: function(res) {
alert("timeStamp:"+res.data.timeStamp);
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": res.data.appId,
"timeStamp": res.data.timeStamp,
"nonceStr": res.data.nonceStr,
"package":res.data.package,
"signType": "RSA",
"paySign": res.data.paySign //微信签名
},
function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}else{
alert('支付失败!');
}
});
},
error: function (data, status, e) {
console.log("网络异常,验证失败")
}
})
})
</script>
后端可借鉴PHP SDK 使用文档
后端相关代码:
public function xxx(){
global $_W;
global $_GPC;
$order = pdo_get('数据商品信息表', array('ordersn like' => $_GPC['ordersn']));//根据传参找相关内容
$ordersn = 'DD'.date('YmdHis',time()).rand(111111,999999);
//加载SDK需要的文件
include_once "./sdk/AdapaySdk/init.php";
//加载商户的配置文件
include_once "./sdk/AdapayDemo/config.php";
//初始化支付类
$payment = new \AdaPaySdk\Payment();
//支付设置
$payment_params = array(
'app_id'=> '你的appid',
'order_no'=> $ordersn,//订单号
'pay_channel'=> 'wx_pub',//支付方式
'prod_mode' => true,
'time_expire'=> date("YmdHis", time()+86400),
'pay_amt'=> $order['price'],//价格
'goods_title'=> 'xxxx'.$order['ordersn'],
'goods_desc'=> 'xxxx'.$order['ordersn'],
'description'=> 'description',
'notify_url'=>'你的回调地址',
'expend'=> [
'open_id'=> $order['openid'],
]
);
//发起支付
$payment->create($payment_params);
//对支付结果进行处理
if ($payment->isError()){
//失败处理
var_dump($payment->result);
} else {
$resulr = $payment->result['expend']['pay_info'];
$resulr = json_decode($resulr,true);
echo json_encode([
'status' => 1,
'data' => $resulr
]);
}
}
结果测试 :
注:学习使我快乐,实习真棒!