#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);
```