先說下其中的坑,微信的接口文檔和demo,那真叫一個坑,要么文字指向性錯誤,那么demo代碼沒法運行,報的錯,甚至沒有文檔可查
先說明一些問題,街上的一些掃碼微信的二維碼其實一般都是注冊的企業微信號,用的是微信轉賬,企業微信提現需不需要手續費這個目前不知,
第二種就是你買一些東西,商家就會生成一個二維碼給你掃,掃出來就是可以直接支付的,有金額的二維碼,這個才是微信掃碼支付,模式二
其實就是下一個訂單然后支付,模式一的固定二維碼支付不知道有人成功過嗎?我一直運行不成功,返回一直商家數據結構錯誤
demo代碼下載地址: http://download.csdn.net/detail/zh7314/9593664
http://xxx.com/pay/
請記住一定要授權你的頁面的上級目錄,多一級都不行,我不知道為什么
首先把 pay_test\lib\WxPay.Config.php
* APPID:綁定支付的APPID(必須配置,開戶郵件中可查看) * * MCHID:商戶號(必須配置,開戶郵件中可查看) * * KEY:商戶支付密鑰,參考開戶郵件設置(必須配置,登錄商戶平台自行設置) * 設置地址:https://pay.weixin.qq.com/index.php/account/api_cert * * APPSECRET:公眾帳號secert(僅JSAPI支付的時候需要配置, 登錄公眾平台,進入開發者中心可設置), * 獲取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
這個你去設置的32的那個
* @var string */ const APPID = ''; const MCHID = ''; const KEY = ''; const APPSECRET = '';
提交的頁面就是 submit.php 接受頁面是 getqrcode.php 這個頁面就是生產二維碼和主動請求訂單是否支付成功的
http://xxx.com/pay_test/return.php 這個也是個坑,至今沒有接受過任何數據,捕捉了頁面接受的所有東西,寫入日志就是什么都沒有,好奇怪
如果有知道任何接受的兄弟,請聯系樓下,發下demo代碼看下
submit.php代碼
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="../../public/css/bootstrap-responsive.css" rel="stylesheet"> <link href="../../public/css/bootstrap.css" rel="stylesheet"> <script type="text/javascript" src="../../public/js/bootstrap.js"></script> <script type="text/javascript" src="../../public/js/jquery.js"></script> <style type="text/css"> .form-signin { max-width: 300px; padding: 19px 29px 29px; margin: 0 auto 20px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); box-shadow: 0 1px 2px rgba(0,0,0,.05); } .form-signin .form-signin-heading, .form-signin .checkbox { margin-bottom: 10px; } .controls input[type="text"]{ font-size: 15px; height: auto; } </style> <title>融智金融-微信支付還款</title> </head> <body> <div class="container-fluid"> <div class="row-fluid"> <div class="span12"> <div class="text-center"> <img alt="140x140" src="../../public/image/logo.png" /> </div> <h3 class="text-center"> 融智金融 </h3> <div class="alert"> <button type="button" class="close" data-dismiss="alert">×</button> <h4> 溫馨提示! </h4> <strong>金額填寫:</strong> 100元就寫100即可<br> <strong>備注格式:</strong> 營業廳-操作人員-金額 </div> <form class="form-signin" action="getqrcode.php" method="post"> <input type="text" class="input-block-level" placeholder="金額" name="money" id="money"> <input type="text" class="input-block-level" placeholder="備注" name="note" id="note"> <button class="btn" type="button" id="form_id">生成二維碼</button> </form> </div> </div> </div> </body> </html> <script> $(function() { $('#form_id').click(function(){ if($('#money').val()==''){ alert('金額不能為空'); return; } if(isNaN($('#money').val())){ alert("金額必須為數字"); return; } if($('#money').val()==0){ alert('金額不能為0元'); return; } if($('#money').val()>=0.01){ $('.form-signin').submit(); } // $('.form-signin').unbind("click"); }); }); </script>
getqrcode.php
<?php ini_set('date.timezone','Asia/Shanghai'); require_once "../lib/WxPay.Api.php"; require_once "WxPay.NativePay.php"; include '../../admin/db.php'; $money = (float)$_POST['money']*100; $mon = (float)$_POST['money']; $note = htmlspecialchars(addslashes($_POST['note'])); $SetBody = '微信支付還款'; $SetAttach = '微信掃碼還款'; $SetOut_trade_no = date("YmdHis").rand(1,100);; $SetGoods_tag ='產品'; //數據庫生成數據,根據return.php更改數據,訂單是否支付成功 $time = time(); // try{ $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'INSERT INTO wx_log (log_id,out_trade_no,prepay_id,money,notify_money,time,note,result_code) VALUES (null,:SetOut_trade_no,0,:money,0,:time,:note,0)'; $stmt = $db->prepare($sql); $stmt->bindParam(':SetOut_trade_no', $SetOut_trade_no); $stmt->bindParam(':money',$mon); $stmt->bindParam(':time',$time); $stmt->bindParam(':note', $note); $stmt->execute(); // }catch(PDOException $exception){ // echo 'PDO Exception Caught.'; // echo 'Error with the database:<br />'; // echo 'SQL Query: '.$query; // // echo '<pre>'; // echo "Error: ".$exception->getMessage()."<br />"; // echo "Code: ".$exception->getCode()."<br />"; // echo "File: ".$exception->getFile()."<br />"; // echo "Line: ".$exception->getLine()."<br />"; // echo "Trace: ".$exception->getTraceAsString()."<br />"; // echo '</pre>'; // } //die; $notify = new NativePay(); $input = new WxPayUnifiedOrder(); $input->SetBody($SetBody); $input->SetAttach($SetAttach); $input->SetOut_trade_no($SetOut_trade_no); $input->SetTotal_fee($money); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag($SetGoods_tag); $input->SetNotify_url("http://pay.xinyzx.com/pay_test/return.php"); $input->SetTrade_type("NATIVE"); $input->SetProduct_id("1"); $result = $notify->GetPayUrl($input); $url = $result["code_url"]; //include '../phpqrcode.php'; //QRcode::png($url); ?> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="../../public/css/bootstrap-responsive.css" rel="stylesheet"> <link href="../../public/css/bootstrap.css" rel="stylesheet"> <script type="text/javascript" src="../../public/js/bootstrap.js"></script> <script type="text/javascript" src="../../public/js/jquery.js"></script> <title>融智金融-微信支付還款</title> </head> <body> <div class="container-fluid"> <div class="row-fluid"> <div class="span12"> <div class="text-center"> <img src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url);?>" style="width:300px;height:300px;margin-top: 20%"/> <input type="hidden" name="out_trade_no" id="out_trade_no" value="<?php echo $SetOut_trade_no;?>" /> </div> </div> </div> </div> <script> $(function(){ setInterval(function(){check()}, 5000); //5秒查詢一次支付是否成功 }) function check(){ var url = "notify_orders.php"; var out_trade_no = $("#out_trade_no").val(); var param = {'out_trade_no':out_trade_no}; $.post(url, param, function(data){ data = JSON.parse(data); if(data['trade_state'] == "SUCCESS"){ // alert(JSON.stringify(data)); alert("訂單支付成功"); window.location.href = "submit.php"; } }); } </script> </body> </html>
notify_orders.php
ini_set('date.timezone','Asia/Shanghai'); error_reporting(E_ERROR); require_once "../lib/WxPay.Api.php"; //$_POST["out_trade_no"] = '201607291913581075'; //處理客戶支付,是否支付成功 if(isset($_POST["out_trade_no"]) && $_POST["out_trade_no"] != ""){ $out_trade_no = $_POST["out_trade_no"]; $input = new WxPayOrderQuery(); $input->SetOut_trade_no($out_trade_no); // P(WxPayApi::orderQuery($input)); // exit(); echo json_encode(WxPayApi::orderQuery($input)); exit(); }
核心的部分就是這些,還有一個后台對賬的其實很簡單了,詳細的請參看代碼