#weixin_pay_sdk 使用介绍
微信支付官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
创建支付对象
```
$parameter=array(
'appid'=>'', //微信ID
'appsecret'=>'', //微信密钥
'mch_id'=>'', //微信商户ID
'paykey'=>'', //微信商户密钥
);
$wxpay = new weixin_pay($parameter);
```
简单的订单,必填的参数
```
$openid='wxd678efh567hg6787'; //用户openid
$orderid='2016030412030456'; //订单号
$price='0.01'; //价格
$goods_name='测试商品'; //商品名称
$notify_url='http://你的域名/notice.php' //支付状态 通知URL
```
###统一下单接口(默认方式调用)
```
$wOpt=$wxpay->unifiedorder($openid,$orderid,$price,$goods_name,$notify_url);
```
###统一下单接口(自定义方式调用下单)
```
//附加参数,根据需要传入需要的值。
$attach=array(
'device_info'=>'WEB', //String(32), 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
'detail'=>'', //String(8192),商品详情明细介绍
'attach'=>'', //String(127), 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
'fee_type'=>'CNY', //String(16), 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2
'time_start'=>'', //String(14), 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010
'time_expire'=>'', //String(14), 订单失效时间(到这个时间用户未支付,该订单自动失效),格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010 注意:最短失效时间间隔必须大于5分钟
'goods_tag'=>'', //String(32), 商品标记,代金券或立减优惠功能的参数
'trade_type'=>'JSAPI', //String(16), 取值如下:JSAPI,NATIVE,APP
'product_id'=>'', //String(32), trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
'limit_pay'=>'', //String(32), no_credit--指定不能使用信用卡支付
);
//比如用户下单后1小时后用户还未付款自动把该订单关闭。
$op=array(
'time_start'=>date('YmdHis',time()),
'time_expire'=>date('YmdHis',strtotime("+1 hours"))
);
$wOpt=$wxpay->unifiedorder($openid,$orderid,$price,$goods_name,$notify_url,$op);
```
手机端调用js,用户用手机微信打开这个页面 会弹出微信支付。
```
<script type="text/javascript">
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
'appId' : '<?php echo $wOpt['appId'];?>',
'timeStamp': '<?php echo $wOpt['timeStamp'];?>',
'nonceStr' : '<?php echo $wOpt['nonceStr'];?>',
'package' : '<?php echo $wOpt['package'];?>',
'signType' : '<?php echo $wOpt['signType'];?>',
'paySign' : '<?php echo $wOpt['paySign'];?>'
}, function(res) {
if(res.err_msg == 'get_brand_wcpay_request:ok') {
alert('您已成功付款!');
window.location.href=''; //支付成功后跳转的URL
}else{
//付款失败的提示信息
alert(res.err_msg);
}
});
}, false);
</script>
```
###扫码支付
```
$op=array(
'trade_type'=>'NATIVE',
'product_id'=>'20160506001', //String(32), trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
);
$code_url=$wxpay->unifiedorder($openid,$orderid,$price,$goods_name,$notify_url,$op);
```
$code_url对应链接格式:weixin://wxpay/bizpayurl?sr=XXXXX。请调用第三方库将code_url生成二维码图片。用户扫描二维码完成支付。
###支付回调(微信支付通知)
```
$wxnotify = new weixin_pay_notify();
//返回微信通知返回支付后的数据
$notify_data = $wxnotify->getnotify();
//根据微信支付后返回的数据修改商户本地的订单状态修改成功后 通知微信
$wxnotify->return_notify(); //通知微信 我以收到通知并完成支付。
```
###查询订单
```
//根据商户订单号查询订单
$order=$wxpay->orderquery(array('out_trade_no'=>'201505081213'));
//根据微信订单号查询订单
$order=$wxpay->orderquery(array('transaction_id'=>'1009660380201506130728806387'));
print_r($order); //返回订单数据
```
###关闭订单 (注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。)
```
//根据商户订单号关闭订单
$order=$wxpay->closeorder(array('out_trade_no'=>'201505081213'));
//根据微信订单号关闭订单
$order=$wxpay->closeorder(array('transaction_id'=>'1009660380201506130728806387'));
print_r($order); //返回关闭订单的数据
```
###申请退款 (默认退款)
```
$refundid="T201505081214"; //退款id (自己生成)
$total=0.01; //订单总价
$refund=0.01; //退款价格
$orderid=array('out_trade_no'=>'201505081215') 或者 array('transaction_id'=>'1009660380201506130728806387') //商户订单号查询订单或者微信订单号
$order=$wxpay->refund($refundid,$total,$refund,$orderid);
```
###申请退款 (带附加参数的退款)
```
$refundid="T201505081214"; //退款id (自己生成)
$total=0.01; //订单总价
$refund=0.01; //退款价格
$orderid=array('out_trade_no'=>'201505081215') 或者 array('transaction_id'=>'1009660380201506130728806387') //商户订单号查询订单或者微信订单号
//附加参数,根据需要传入需要的值。
$attach=array(
'device_info'=>'WEB', //String(32), 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
'refund_fee_type'=>'CNY', //String(16), 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2
'op_user_id'=>'', //String(32), 操作员帐号, 默认为商户号 (场景:用户申请退款,后台管理员同意 可以知道哪个管理员操作的同意)
)
//添加操作员的退款
$op=array(
'op_user_id'='admin';
);
$order=$wxpay->refund($refundid,$total,$refund,$orderid,$op);
```
###查询退款
```
$orderid=array( //订单号 (微信的订单号,商户订单号,商户退款单号, 微信退款单号 四选一)
'transaction_id'=>'', //微信订单号
'out_trade_no'=>'' //商户订单号
'out_refund_no'=>'', //商户退款单号
'refund_id'=>'', //微信退款单号
)
//根据订单号查询退款订单 订单号=(微信的订单号,商户订单号,商户退款单号, 微信退款单号 四选一)
//如 根据商户订单号查询退款订单
$order=$wxpay->refundquery(array('out_trade_no'=>'201505081213'));
```
###下载对账单 (默认方式)
```
$date='20140603';
$bill=$wxpay->downloadbill($date);
```
###下载对账单 (带附加参数和导出excel)
```
//附加参数,根据需要传入需要的值。
$atta=array(
'device_info'=>'WEB', //String(32), 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
'bill_type'=>'ALL', //String(8), 默认值:ALL,返回当日所有订单信息, SUCCESS,返回当日成功支付的订单 REFUND,返回当日退款订单
)
//只查询成功的订单并导出excel
$date='20140603';
$atta=array(
'bill_type'=>'SUCCESS'
);
$bill=$wxpay->downloadbill($date,$atta,true);
```