ThinkPHP5 整合微信扫码支付

摘要

  • 为了便于微信开发,此处在ThinkPHP5.0 框架下整合了微信扫码支付的功能,测试需要外网项目部署.
  • 对于TP3的集成,可参考之前写的文章 ThinkPHP 框架下微信支付

功能开发

微信支付SDK整理移植

  • 一般会进行原生开发,那么就可以直接下载开发文档中的PHP-SDK,此处的代码进行了整理。
  • 需要将 ..\application\extend 目录下的 wxpay 对应移植到自己的项目目录中.

配置 WxPayConfig

  • 定位到 ..\application\extend\wxpay\WxPayConfig.php 文件,配置微信支付的四个重要数据.
  • 注意:NOTIFY_URL 要写绝对路径
 /**
     * 微信公众号信息配置
     *
     * 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
     * @var string
     */

生成二维码 url

  • 以参考项目为例,在 ..\application\index\controller\Wxpay.php 中添加了index()方法,用于业务处理(例如获取post/get请求数据,并进行商品信息的获取等)以及调用微信接口生成二维码.
  • 得到的qrCode_url 需要赋值到前端页面标签的url
  • 注意外网可访问的要求.
 public function index()
    {
        //TODO 进行业务处理
        //TODO 生成二维码
        $product_id = time()+1;
        $notify = new NativePay();
        $input = new WxPayUnifiedOrder();
        $input->setBody("product_name");
        $input->setAttach("xxx");
        //$input->setOutTradeNo(WxPayConfig::MCHID.date("YmdHis"));
        $input->setOutTradeNo($product_id);
        $input->setTotalFee("1");//以分为单位
        $input->setTimeStart(date("YmdHis"));
        $input->setTimeExpire(date("YmdHis", time() + 600));
        $input->setGoodsTag("test");

        $input->setNotifyUrl(wxPayConfig::NOTIFY_URL);
        $input->setTradeType("NATIVE");
        //$product_id 为商品自定义id 可用作订单ID
        $input->setProductId($product_id);
        $result = $notify->getPayUrl($input);
        if (empty($result['code_url'])){
            $qrCode_url = '';
        }else{
            $qrCode_url = $result["code_url"];
        }

        return $this->fetch('',[
            'qrCode_url' => $qrCode_url,
        ]);
}

回调函数的编辑

  • 以参考项目为例,对应于NOTIFY_URL 的设置,本人在 ..\application\index\controller\Wxpay.php 中添加了notify()方法。
  • 用于异步接收微信支付后的逻辑处理
  • file_put_contents(‘/tmp/2.txt’,$wxData,FILE_APPEND); 代码是为了将微信支付的反馈信息写入本地文件,便于分析处理.
/**
     * 微信支付 回调逻辑处理
     * @return string
     */
public function notify(){
        $wxData = file_get_contents("php://input");
        //file_put_contents('/tmp/2.txt',$wxData,FILE_APPEND);
        try{
            $resultObj = new WxPayResults();
            $wxData = $resultObj->Init($wxData);
        }catch (\Exception $e){
            $resultObj ->setData('return_code','FAIL');
            $resultObj ->setData('return_msg',$e->getMessage());
            return $resultObj->toXml();
        }

        if ($wxData['return_code']==='FAIL'||
            $wxData['return_code']!== 'SUCCESS'){
            $resultObj ->setData('return_code','FAIL');
            $resultObj ->setData('return_msg','error');
            return $resultObj->toXml();
        }
        //TODO 根据订单号 out_trade_no 来查询订单数据
        $out_trade_no = $wxData['out_trade_no'];
        //此处为举例
        $order = model('order')->get(['out_trade_no' => $out_trade_no]);

        if (!$order || $order->pay_status == 1){
                $resultObj ->setData('return_code','SUCCESS');
                $resultObj ->setData('return_msg','OK');
                return $resultObj->toXml();
        }
        //TODO 数据更新 业务逻辑处理 $order
    }

附录

thinkphp开源商城 含支付宝微信支付 三级分销商城: (一) 系统管理:菜单权限、前台菜单、角色管理、职员管理、登录日志、操作日志、图片空间、商城消息、风格设置、计划任务 (二) 基础设置:商城配置、导航管理、广告管理、广告位置、银行管理、支付管理、地区管理、友情链接、快递管理、消息模板 (三) 会员管理:会员等级、会员管理、账号管理 (四) 文章管理:文章管理、文章分类 (五) 运营管理:推荐管理、商品推荐、店铺推荐、品牌推荐、财务管理、资金管理、提现申请、结算管理、商家结算 (六) 订单管理:订单管理、订单管理、投诉管理、退款管理 (七) 店铺管理:店铺认证、开店申请、店铺管理、停用店铺 (八) 商品管理:商品管理、已上架商品、待审核商品、违规商品、商品分类、商品属性、品牌管理、商品规格、评价管理 (九) 虚拟物品自动发货:虚拟商品上架、卡密管理、自动发货 (十) 扩展管理:插件管理、钩子管理 (十一) 分销管理:分销管理菜单、分销商家列表、分销商品列表、佣金分成列表、推广用户列表 (十二) 数据分析:商品销售排行、店铺销售统计、销售额统计、销售订单统计、新增会员统计、会员登录统计 (十三) 营销管理:三级分销,商品团购,限时拍卖、微砍价、优惠券、满减、满送、满邮、签到送积分、积分商城 (十四) 微信管理:公众号设置、自定义菜单、用户管理、主动回复文本信息、主动回复图文信息、微信消息模板 (十五) 支付管理:支付宝支付,微信支付、银联支付、货到付款、积分支付、余额支付 (十六) 短信接口:中国网建、阿大于 (十七) 登录接口:QQ登录、微信登录、微博登录 (十八) 物流接口:快递100接口 (十九) 其他接口:UCenter通信接口(可与社区论坛等同步登录退出)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值