ThinkPHP框架整合微信支付之刷卡模式图文详解


Posted in PHP onApril 10, 2019

本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式。分享给大家供大家参考,具体如下:

大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付

本教程跟前三篇教程不一样,所需要的类库也不一样,所以做刷卡支付的时候,与之前的方法没多少关系,大家注意一下。

下面开始介绍详细步骤!

step1:下载微信刷卡支付demo,如下图:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

WxPayMicropayHelper:这个文件夹下就是刷卡支付微信提供的类库

demo:这个文件夹下是关于刷卡支付的详细demo

我们来看一下demo文件夹: ThinkPHP框架整合微信支付之刷卡模式图文详解

这里我们要用到

micropay_call.php:这个就是刷卡支付的具体demo

我们可以把里面内容复制下来,放到TP的控制器中(稍后介绍)

step2:把下载下来的微信刷卡支付的类库同样放到Vendor目录下:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

step3:上面的类库放好后我们可以来写控制器里面的内容了首先还是引入类库:

/**
     * 初始化
     */
    public function _initialize()
    {
        //引入WxPayPubHelper
        vendor('WxPayMicropayHelper.WxPayMicropayHelper');
    }

接下来把micropay_call.php下的代码提取出来复制到控制器下,并给个名字:

public function micropay()
    {
        //自定义订单号,此处仅作举例
        $timeStamp = time();
        $out_trade_no = \WxPayConf_micropay::APPID."$timeStamp";
        
        //获取用户一维码
        if (isset($_POST["auth_code"]))
        {
            $auth_code = $_POST["auth_code"];
        
            //使用被扫支付接口
            $micropayCall = new \MicropayCall();
        
            //设置被扫支付接口参数
            //设置必填参数
            //appid已填,商户无需重复填写
            //mch_id已填,商户无需重复填写
            //noncestr已填,商户无需重复填写
            //spbill_create_ip已填,商户无需重复填写
            //sign已填,商户无需重复填写
            $micropayCall->setParameter("body","贡献一分钱");//商品描述
            $micropayCall->setParameter("out_trade_no","$out_trade_no");//商户订单号
            $micropayCall->setParameter("total_fee","1");//总金额
            $micropayCall->setParameter("auth_code","$auth_code");//交易类型
            //非必填参数,商户可根据实际情况选填
            //$micropayCall->setParameter("sub_mch_id","XXXX");//子商户号
            //$micropayCall->setParameter("device_info","XXXX");//设备号
            //$micropayCall->setParameter("attach","XXXX");//附加数据
            //$micropayCall->setParameter("time_start","XXXX");//交易起始时间
            //$micropayCall->setParameter("time_expire","XXXX");//交易结束时间
            //$micropayCall->setParameter("goods_tag","XXXX");//商品标记
            //$micropayCall->setParameter("openid","XXXX");//用户标识
            //$micropayCall->setParameter("product_id","XXXX");//商品ID
        
            //提交订单
            $micropayCallResult = $micropayCall->getResult();
        
            //商户根据实际情况设置相应的处理流程,此处仅作举例
            if ($micropayCallResult["return_code"] == "FAIL") 
            {
                echo "通信出错:".$micropayCallResult['return_msg']."<br>";
            }
            elseif($micropayCallResult["result_code"] == "FAIL")
            {
                echo "出错"."<br>";
                echo "错误代码:".$micropayCallResult['err_code']."<br>";
                echo "错误代码描述:".$micropayCallResult['err_code_des']."<br>";
            }
            else
            {
                echo "用户标识:".$micropayCallResult['openid']."<br>";
                echo "是否关注公众账号:".$micropayCallResult['is_subscribe']."<br>";
                echo "交易类型:".$micropayCallResult['trade_type']."<br>";
                echo "付款银行:".$micropayCallResult['bank_type']."<br>";
                echo "总金额:".$micropayCallResult['total_fee']."<br>";
                echo "现金券金额:".$micropayCallResult['coupon_fee']."<br>";
                echo "货币种类:".$micropayCallResult['fee_type']."<br>";
                echo "微信支付订单号:".$micropayCallResult['transaction_id']."<br>";
                echo "商户订单号:".$micropayCallResult['out_trade_no']."<br>";
                echo "商家数据包:".$micropayCallResult['attach']."<br>";
                echo "支付完成时间:".$micropayCallResult['time_end']."<br>";
            }
        }
        else
        {
            $this->assign('out_trade_no',$out_trade_no);
            $this->display();
        }
    }

这是我写的控制器方法内容,对应micropay.html页面:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>微信安全支付</title>
</head>
<body>
    </br></br>
    <div align="center">
        <form  action="__SELF__" method="post">
            <p>请输入微信刷卡界面的一维码:</p>
            <p><input type="text" name="auth_code" value=""></p>
            <button type="submit">提交</button>
        </form>
    </div>
        
    <div align="center">
        <p>订单号:<?php echo $out_trade_no; ?></p>
    </div>
    
    <div align="center">
    <table>
        <td>
        <form action="./order_query.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <button type="submit" >查询订单状态</button>
        </form>
        </td>
        
        
        <td>
        <form  action="./refund.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <input name="refund_fee" type='hidden' value="1">
            <button type="submit" >申请退款</button>
        </form>
        </td>
        
        <td>
        <form  action="./reverse.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <button type="submit" >冲正</button>
        </form>
        </td>
    </table>
    </div>
        
    <br>
    <div align="center">
        <a href="../index.php" rel="external nofollow" >返回首页</a>
    </div>

</body>
</html>

到此我们就可以去测试一下了

请看页面:

ThinkPHP框架整合微信支付之刷卡模式图文详解

面中刷卡的一维码就是你微信里面钱包下面的刷卡功能,打开后就可以看到你的一维码,这个一维码是过一段时间就自己刷新的,输入进去点击提交,请看微信页面:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

到此,刷卡支付功能也做好啦

微信支付教程jsapi篇:
//3water.com/article/159351.htm

微信支付教程扫码模式一:
//3water.com/article/159356.htm

微信支付教程扫码模式二:
//3water.com/article/159362.htm

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
php打造属于自己的MVC框架
Mar 07 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
php数组指针操作详解
Feb 14 PHP
PHP实现Huffman编码/解码的示例代码
Apr 20 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 PHP
laravel配置Redis多个库的实现方法
Apr 10 #PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 #PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 #PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 #PHP
You might like
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
js中url对象化管理分析
2017/12/29 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python探索之修改Python搜索路径
2017/10/25 Python
Python实现多线程的两种方式分析
2018/08/29 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
幼儿园教研活动方案
2014/01/19 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
客房服务员岗位职责
2015/02/09 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA