微信支付 掃碼支付 模式二 完整版和測試代碼+后台對賬


先說下其中的坑,微信的接口文檔和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();
}

 

 

 

核心的部分就是這些,還有一個后台對賬的其實很簡單了,詳細的請參看代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM