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 相关文章推荐
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
如何使用Strace调试工具
Jun 03 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
php使用google地图应用实例
Dec 31 PHP
用PHP代码给图片加水印
Jul 01 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
PHP children()函数讲解
Feb 03 PHP
PHP设计模式之命令模式示例详解
Dec 20 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
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php中__toString()方法用法示例
2016/12/07 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python 列表理解及使用方法
2017/10/27 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python制作图片缩略图
2019/04/30 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
使用pip安装python库的多种方式
2019/07/31 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
编辑找工作求职信分享
2014/01/03 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
写给女朋友的道歉信
2014/01/08 职场文书
效能风暴心得体会
2014/09/04 职场文书
法人授权委托书
2014/09/16 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
运动会100米加油稿
2015/07/21 职场文书
2016年主题党日活动总结
2016/04/05 职场文书