• 微信支付 扫码支付 模式二 完整版和测试代码+后台对账


    先说下其中的坑,微信的接口文档和demo,那真叫一个坑,要么文字指向性错误,那么demo代码没法运行,报的错,甚至没有文档可查

    先说明一些问题,街上的一些扫码微信的二维码其实一般都是注册的企业微信号,用的是微信转账,企业微信提现需不需要手续费这个目前不知,

    第二种就是你买一些东西,商家就会生成一个二维码给你扫,扫出来就是可以直接支付的,有金额的二维码,这个才是微信扫码支付,模式二

    其实就是下一个订单然后支付,模式一的固定二维码支付不知道有人成功过吗?我一直运行不成功,返回一直商家数据结构错误

    demo代码下载地址:  http://download.csdn.net/detail/zh7314/9593664

    http://xxx.com/pay/
     
    请记住一定要授权你的页面的上级目录,多一级都不行,我不知道为什么

    首先把 pay_testlibWxPay.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- 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="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();
    }

    核心的部分就是这些,还有一个后台对账的其实很简单了,详细的请参看代码

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Cookie、Session、Token
    Spark SQL
  • 原文地址:https://www.cnblogs.com/zx-admin/p/5726657.html
Copyright © 2020-2023  润新知