微信扫码支付API接口完整开发实例(php版)
随着微信支付的流行,越来越多的公司开始使用这种方式进行支付。
微信也给出了许多接口供使用,比如扫码支付、公众号支付、H5支付、刷卡支付等。
今天我们分享的是:微信扫码支付完整实例。
首先需要公众号开通微信支付。
其次,访问微信支付商户平台(https://pay.weixin.qq.com/index.php/core/account)配置相关信息。
准备工作。
1、去https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1下载对应的SDK与DEMO,解压后放到网站根目录下面,文件名自己取。
2、数据库订单表order,字段有o_id,o_ordercode,o_ordercode_wx,o_status
下面正式开始。
一、支付页面pay.php
注意表单里面要包含相关字段。
php代码<?php
//先根据前台生成订单的id(假设为1234)获取订单相关的数据
//status是订单状态,我们以1和2区分,1是未付款,2是已付款。
if ($s_status<2){
$WIDout_trade_no_wx=date("YmdHis").rand(1001,9999);
//根据订单id将$WIDout_trade_no_wx update到对应的o_ordercode_wx里面
}
echo '
<style>
.none{display:none;}
.block{display:block;}
.paysuccess{display:none;}
</style>
<script language="javascript" src="pay.js"></script>
<div class="divpay'.($s_status>1?' none':'').'">微信支付二维码</div>
<div class="paysuccess'.($s_status>1?' block':' none').'">支付成功</div>
<input type="hidden" name="WIDout_trade_no" value="这里是订单号" />
<input type="hidden" name="WIDout_trade_no_wx" id="WIDout_trade_no_wx" value="'.$WIDout_trade_no_wx.'" />
<input type="hidden" name="WIDsubject" value="" />
<input type="hidden" name="WIDtotal_fee" value="" />
<input type="hidden" name="WIDbody" value="" />
<input type="hidden" name="WIDshow_url" value="" />
<input type="hidden" name="orderid" id="orderid" value="1234" />
<input type="hidden" name="status" id="status" value="1" />
';
?>
上面有些因为还涉到支付宝支付接口,所以就全列出来了。
关于WIDout_trade_no_wx具体是什么原因加的,忘了。
反正是当时遇到问题才加的,好像是pay.php页面每次刷新后,有时同一个订单号二维码不会再出现,所以加了一个WIDout_trade_no_wx每次随机date("YmdHis").rand(1001,9999)填充进去。
二、pay.js文件
javascript代码<script>
var setinterval;
$(document).ready(function(e) {
if ($("#status").val()<2){//如果状态为1,则创建二给码
var url="weixinpay/example/native.php";
var params = $("form").serialize();
$.ajax({
url:url,
type:"post",
data:params,
dataType:"JSON",
success: function(data){
$(".divpay").html(data.qrcode+"<img src='二维码下面那个扫码提示图片' />");
//这里根据自己的代码改,因为我的还有支付宝支付所以divpay是随便写的
}
});
setinterval=setInterval(function(){checkpay()}, 5000);//每隔5秒检测是否支付
}
});
function checkpay(){
var url ="weixinpay/example/orderquery.do";
var out_trade_no = $("#WIDout_trade_no_wx").val();
var params = {'out_trade_no':out_trade_no};
$.post(url, params, function(data){
data = JSON.parse(data);
if(data.trade_state == "SUCCESS"){
$(".divpay").hide();
$(".paysuccess").show();
clearInterval(setinterval);
}else{
alert('支付失败');
}
});
}
</script>
需要注意的是,如果检测支付成功了,则要使用clearInterval来停止检测,否则会一直每隔5秒一直执行。
三、lib/WxPay.Config.php
修改此文件,这里是非常重要,不要填错了。
php代码<?php
const APPID = '';//填开户邮件中的(公众账号APPID或者应用APPID)
const MCHID = '';//开户邮件中的商户号
const KEY = '';//登录http://pay.weixin.qq.com 平台设置的“API密钥”,为了安全,请设置为32字符串。
const APPSECRET = '';//公众平台开发者中心获取AppSecret
const SSLCERT_PATH = '../cert/apiclient_cert.pem';
const SSLKEY_PATH = '../cert/apiclient_key.pem';
?>
关于apiclient_cert.pem和apiclient_key.pem这两个文件,下载的时候会有提示,下载后粘贴到cert目录下替换原有的。
证书下载地址:微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->证书下载