微信支付Easywechat,详细参数总结

                         如何使用easywechat开发微信支付功能


    easywechat是神一样的存在。非常好用。希望大家都能转到这上面来。


    用easywechat来开发微信支付功能,步骤如下:


    一,需要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一个购买按钮。

        用户在这个页面浏览商品信息的时候,可以选择购买的数量,然后点击提交进入下一个页面。

       (这个页面,跟淘宝的商品购买页面一样。)


    二,创建一个页面,接收上面一步提交来的数据,然后做如下计算 。


        1,根据商品ID或是提交来的商品信息,生成商品的参数数组。

一般是前端发起一个链接:

前面再加一个生成账单请求,在后台生产csrf,再返回一个订单id

//csrf验证
function  csrf_val(){
     $val= md5( time(). rand( 1000, 9999));
    session( 'csrf_val', $val);
     return  $val;
}

收到后直接跳转

   location. href =  this. $host +  "/pay/wxpay?wxid=" +  res. data. data. wxid +  "&csrf=" +  res. data. data. csrf
    public  function  wxpayAction()
    {

         $get = I( 'get.');

         $csrf =  $get[ "csrf"];
         if(csrf_valid( $csrf)){//判断

             $wxid= $get[ "wxid"];
             $openid=open_id();// openid是授权后微信服务器获取的,也是用户唯一凭证!!!
             $model= new  WalletModel();
             $ret= $model->wxpay( $wxid, $openid);
             $json= $ret[ "json"];
             $url= $ret[ "url"];

        }
         //$this->_view->assign(compact('json', 'url'));
         $this->getView()->display( 'pay/cashpay.phtml');
    }
     public  function  wxpay( $wxid$openid)
    {
         $pay = M( "awxpay")
            ->field([ "fdcNo""fdiType""fdlSrcID""fdiState""fdmAmt""fdcPrePay"])
            ->where([ "ID" =>  $wxid])->find();
         if (( $pay) && ( $pay[ "fdiState"] ==  0)) {
             $type =  $pay[ "fdiType"];  //支付类型
             $url =  'http://' .  $_SERVER[ 'HTTP_HOST'] .  '/notify/cashpay';
             //微信充值  每个类型要修改这里
             if ( $type ==  1) {
                 $rurl= "/#/finance/recharsuccess?type=1";
                 $json =  $this->postWxPay( $wxid$openid$pay[ "fdmAmt"],  $pay[ 'fdcNo'],  "充值""平台充值"$url$pay[ "fdcPrePay"]);
            }  else  if ( $type ==  2) {
                 $rurl= "/#/finance/paysuccess";
                 $json =  $this->postWxPay( $wxid$openid$pay[ "fdmAmt"],  $pay[ 'fdcNo'],  "订单支付""平台订单支付"$url$pay[ "fdcPrePay"]);
            }
        }
         return [ "json" =>  $json"url" =>  $rurl];
    }
//生成微信支付订单,并返回数据前端用于调起支付
     public  function  postWxPay( $wxpayid$openid$amt$tradeno$body$detail$notifyurl$PrePay)
    {
         if (! $PrePay) {  //之前没有发起过支付
             $money =  intval( $amt *  100);
             if ( $money >  0) {
                 $attributes = [
                     'trade_type' =>  'JSAPI'// JSAPI,NATIVE,APP...
                     'body' =>  $body,
                     'detail' =>  $detail,
                     'out_trade_no' =>  $tradeno,
                     'total_fee' =>  $money,
                     'notify_url' =>  $notifyurl,
                     'openid' =>  $openid,
                     'attach' =>  2,
                ];
                 $order =  new \EasyWeChat\Payment\ Order( $attributes);
                 $wechat = wechat();
                 $result =  $wechat-> payment->prepare( $order);
                 $prepayId =  $result-> prepay_id;
                 if ( $result-> return_code ==  'SUCCESS' &&  $result-> result_code ==  'SUCCESS') {
                     $this->upPrePayID( $wxpayid$prepayId);
                     $json =  $wechat-> payment->configForPayment( $prepayId);
                }  else {
                     $this->upPrePayID( $wxpayid$prepayId);
                     $res =  json_encode( $result);

                     //生成支付订单报错
                     throw  new  Exception( $resConstants::ERROR_PAY_CODE);
                }
                 return  $json;

            }
        }  else {  //重新调起之前发起过的支付
             $wechat = wechat();
             $json =  $wechat-> payment->configForPayment( $PrePay);
             return  $json;
        }

    }
<?php

class  WechatModel  extends \EasyWeChat\Foundation\ Application{

     //初始化配置
     public  function  __construct() {
         $option=[
             'debug'  =>  true,

             'app_id'  => sysparam( 'app_id'),          // AppID//微信接口应用ID
             'secret'  => sysparam( 'secret'),      // AppSecret//微信接口密匙
             'token'   => sysparam( 'token'),           // Token//微信接口Token
             'aes_key'  => sysparam( 'aes_key' ),        //消息加解密密钥 //这些在微信后台都有

             'log' => [
                 'level' =>  'info',
                 'file'  =>  '/data/log/wechat.log',
            ],

             'oauth' => [
                 'scopes'   => [ 'snsapi_base'],
                 'callback' =>  '/notify/notify',
            ],
             'payment' => [
                 'merchant_id'        => sysparam( 'merchant_id'),//这个开通微信支付后才有,商户号
                 'key'                 => sysparam( 'key' ), //支付key
                 'cert_path'          => sysparam( 'cert_path'),  // XXX: 绝对路径!!!!//证书cert
                 'key_path'           => sysparam( 'key_path'),       // XXX: 绝对路径!!!!//证书key
            以上开通支付账号都会有
  证书pem格式
(apiclient_cert.pem)

            ],
             'guzzle' => [
                 'timeout' =>  3.0// 超时时间(秒)
                 //'verify' => false, // 关掉 SSL 认证(强烈不建议!)
            ],
        ];
        debuglog( $option);
         parent::__construct( $option);
    }




[php]  view plain  copy
  1. $product = [  
  2.     'trade_type'       => 'JSAPI'// 微信公众号支付填JSAPI  
  3.     'body'             => '一盒火柴',  
  4.     'detail'           => '一盒火些',  
  5.     'out_trade_no'     => 'MYERPORDERID12345678'// 这是自己ERP系统里的订单ID,不重复就行。  
  6.     'total_fee'        => 8888, // 金额,这里的8888分人民币。单位只能是分。  
  7.     'notify_url'       => 'http://www.xxx.com/order_notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址  
  8.     'openid'           => 'you-open-id'// 这个不能少,少了要报错。  
  9.     // ...  基本上这些参数就够了,或者参考微信文档自行添加删除。  
  10. ];  

        2,接下来,生成商品对象。


[php]  view plain  copy
  1. $order = new Order($product);  

        3,再接下来,要进行调用前计算了。


[php]  view plain  copy
  1. $app = new Application(config('wechat'));  
  2. $payment = $app->payment;  
  3. $result = $payment->prepare($order); // 这里的order是上面一步得来的。 这个prepare()帮你计算了校验码,帮你获取了prepareId.省心。  
  4. $prepayId = null;  
  5. if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){  
  6.     $prepayId = $result->prepay_id; // 这个很重要。有了这个才能调用支付。  
  7. else {  
  8.     var_dump($result);  
  9.     die("出错了。");  // 出错就说出来,不然还能怎样?  
  10. }  
  11. $config = $payment->configForJSSDKPayment($prepayId); // 这个方法是取得js里支付所必须的参数用的。 没这个啥也做不了,除非你自己把js的参数生成一遍  
https://blog.csdn.net/b850824/article/details/73911027


        4,就快进入正题,但是,还没完。还要取得一个数据。


[php]  view plain  copy
  1. $app = new Application(config('wechat'));  
  2. $js = $app->js;  // 这个是jssdk里页面上需要用到的js参数信息。  


        5,上面获得的$js 和 $config数据,要在页面里显示出来。

                注意,上面几步都不涉及显示,只是在生成页面显示所需要的数据。

                现在才需要把这些显示在页面上。


[php]  view plain  copy
  1. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>  
  2. <script type="text/javascript" charset="utf-8">  
  3.     wx.config({{ <span style="font-family: Arial, Helvetica, sans-serif;">$js->config(array('chooseWXPay')) </span><span style="font-family: Arial, Helvetica, sans-serif;">}}); </span>  
  4. </script>  
  5. <script>  
  6.     $(function(){  
  7.   
  8.         $(".btn-do-it").click(function(){  
  9.             wx.chooseWXPay({  
  10.                 timestamp: "{{$config['timestamp']}}"// 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
  11.                 nonceStr: '{{$config['nonceStr']}}'// 支付签名随机串,不长于 32 位  
  12.                 package: '{{$config['package']}}'// 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)  
  13.                 signType: '{{$config['signType']}}'// 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
  14.                 paySign: '{{$config['paySign']}}'// 支付签名  
  15.                 success: function (res) {  
  16.                     // 支付成功后的回调函数  
  17.                     if(res.err_msg == "get_brand_wcpay_request:ok" ) {  
  18.                         alert('支付成功。');  
  19.                         window.location.href="{{url("wechat/pay_ok")}}";  
  20.                     }else{  
  21.                         //alert(res.errMsg);  
  22.                         alert("支付失败,请返回重试。");  
  23.                     }  
  24.                 },  
  25.                 fail: function (res) {  
  26.                     alert("支付失败,请返回重试。");  
  27.                 }  
  28.             });  
  29.         });  
  30.     });  
  31. </script>  

        没错,只需要修改这些。


        再来理一个,第二步里,这个页面需要显示一个确认信息,比如商品的名称,和支付的总金额。

        页面上应该有一个按钮,用来触发支付(.btn-do-it)。

        页面里的js就是第5步里要显示的内容。



        总结:

        第一步,商品信息页面,用户选择购买数据,点购买,提交到第二步的确认页面。

        第二步的确认页面,根据商品信息,和微信配置信息,生成必要的支付数据,并显示购买确认信息,和一个支付按钮,

        用户点击支付按钮,发起支付。

        支付完成,提示用户,或转到相应页面。

        微信的开发团队提醒我们,请以微信的推送信息为准来处理订单,不然有可能人财两空。



-分隔-


product.html


[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>一盒火柴</title>  
  6. </head>  
  7. <body>  
  8.   
  9. <h1>一盒火柴</h1>  
  10.   
  11. <div>  
  12.     卖火柴的小女孩,手里有一堆火柴。  
  13. </div>  
  14.   
  15. <hr>  
  16.   
  17. <div>  
  18.     <form name="form1" action="payment.php" method="post">  
  19.         <lable>数量:</lable>  
  20.         <input name="qty" value="1" />  
  21.         <input name="submit" type="submit" value="购买" />  
  22.     </form>  
  23. </div>  
  24.   
  25. </body>  
  26. </html>  


payment.php


[php]  view plain  copy
  1. <?php  
  2. use EasyWeChat\Foundation\Application;  
  3. use EasyWeChat\Payment\Order;  
  4.   
  5. $product = [  
  6.     'body'             => '一盒火柴',  
  7.     'trade_type'       => 'JSAPI',  
  8.     'out_trade_no'     => 'ERP'.time(),  
  9.     'total_fee'        => 1,  
  10.     'notify_url'       => 'http://test.xxoo.com/wechat/notify/',  
  11.     'openid'           => $_SESSION['openid'],  
  12.     'attach'           => '卖火柴的小女孩',  
  13. ];  
  14.   
  15. $order = new Order($product);  
  16.   
  17. $app = new Application(config('wechat'));  
  18. $js = $app->js;  
  19. $payment = $app->payment;  
  20. $result = $payment->prepare($order);  
  21. $prepayId = null;  
  22. if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){  
  23.     $prepayId = $result->prepay_id;  
  24. else {  
  25.     var_dump($result);  
  26.     die("出错了。");  
  27. }  
  28. $config = $payment->configForJSSDKPayment($prepayId);  
  29. ?>  
  30. <!DOCTYPE html>  
  31. <html lang="en">  
  32. <head>  
  33.     <meta charset="UTF-8">  
  34.     <title>购买支付</title>  
  35. </head>  
  36. <body>  
  37.   
  38. <h1>一盒火柴</h1>  
  39.   
  40. <div>  
  41.     <p>您购买了“一盒火柴”,总价格: 0.01元。</p>  
  42.     <p>数量:1盒。</p>  
  43. </div>  
  44.   
  45. <hr>  
  46.   
  47. <div>  
  48.     <input name="button" id="btnPay" type="button" value="支付" />  
  49. </div>  
  50.   
  51.   
  52.   
  53.   
  54. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>  
  55. <script type="text/javascript" charset="utf-8">  
  56.     wx.config({$js->config(array('chooseWXPay')) }});  
  57. </script>  
  58. <script>  
  59.     $(function(){  
  60.   
  61.         $(".btn-do-it").click(function(){  
  62.             wx.chooseWXPay({  
  63.                 timestamp: "{{$config['timestamp']}}"// 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
  64.                 nonceStr: '{{$config['nonceStr']}}'// 支付签名随机串,不长于 32 位  
  65.                 package: '{{$config['package']}}'// 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)  
  66.                 signType: '{{$config['signType']}}'// 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
  67.                 paySign: '{{$config['paySign']}}'// 支付签名  
  68.                 success: function (res) {  
  69.                     // 支付成功后的回调函数  
  70.                     if(res.err_msg == "get_brand_wcpay_request:ok" ) {  
  71.                         alert('支付成功。');  
  72.                         window.location.href="{{url("wechat/pay_ok")}}";  
  73.                     }else{  
  74.                         //alert(res.errMsg);  
  75.                         alert("支付失败,请返回重试。");  
  76.                     }  
  77.                 },  
  78.                 fail: function (res) {  
  79.                     alert("支付失败,请返回重试。");  
  80.                 }  
  81.             });  
  82.         });  
  83.     });  
  84. </script>  
  85. </body>  
  86. </html>  


这些是伪代码,payment.php并没有对product.html传来的商品信息做处理。

其实只要看payment.php文件应该知道怎么做了。


其它就两点。a,获取$config,b, 自己写wx.chooseWXPay。

其它的看easywechat文档就行了。



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
Python 微信支付 wechatsdk 是一个用于处理微信支付功能的 Python 第三方库。它提供了一系列的接口和方法,用于实现微信支付交易的各种功能,包括创建订单、查询订单状态、申请退款等。 使用 wechatsdk,我们可以方便地集成微信支付功能到 Python 项目中。首先,我们需要通过在微信商户平台上注册账号,并获得相应的密钥和证书文件。然后,在 Python 项目中引入 wechatsdk 库,并根据接口文档的要求设置好相关的配置参数,例如商户 ID、商户密钥等。 接下来,我们可以使用 wechatsdk 提供的接口进行各种支付交易操作。例如,创建订单时我们可以使用统一下单接口,传入必要的参数例如商品描述、订单金额等。wechatsdk 会自动将收到的参数进行签名,并生成一个支付链接。用户在微信客户端打开支付链接后,可以进行支付操作。 支付成功后,wechatsdk 提供了查询订单接口,用于查询订单的支付状态。根据订单号或其他标识,我们可以向微信服务器发起查询请求,获取订单的详细信息,例如支付状态、支付金额等。 退款功能也可以通过 wechatsdk 来实现。我们可以使用申请退款接口传入相应的参数,并进行退款操作。微信服务器会根据退款申请的参数进行处理,并返回相应的结果。 总之,Python 微信支付 wechatsdk 是一个方便易用的库,可以帮助开发者快速集成微信支付功能到他们的 Python 项目中。无论是处理支付交易、查询订单状态还是申请退款,都可以借助 wechatsdk 轻松实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值