侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

ThinkPHP框架实现的微信支付接口开发完整示例

ThinkPHP  /  管理员 发布于 8年前   221

本文实例讲述了ThinkPHP框架实现的微信支付接口开发。分享给大家供大家参考,具体如下:

微信支付接口开发很简单我们只需要在官方申请权限然后参考官方的文章即可实现支付开发了,下面来看一个简单的例子,具体如下。

最近有个微商城做了微信支付的接口,现在整理一下发上来。

首先是需要有已开通微信支付接口的公众号,这个相信大家都知道,开通之后微信会发一封邮件到你的邮箱,邮件的内容就是开发需要用到的一些接口信息了(包含账号密码之类的东西)。

开发步骤

一、进入公众号平台,先设置几个参数,包括绑定域名、设置回调地址等等。

1、在设置 -> 公众号设置 -> 功能设置 -> 设置JS接口安全域名

 

2、在微信支付 -> 开发配置 -> 配置你的js支付接口,回调地址等等,正式目录和测试目录都可以写上,测试目录需要把个人微信号先添加到白名单才能使用(提醒:用TP框架的小伙伴们在填写支付授权目录时可以这样填写:域名/index.php/控制器/,经测试是可以通过的,微信一样能检测到,之前看到网上有人说这样不行,可能是现在升级了吧,呵呵,还有一个就是域名一定要是已经备过案的才行,如果是在本地进行测试的小伙伴们可以使用花生壳,我不是在打广告,个人觉得还是挺好用的)

 

3、在开发者中心把“网页授权获取用户基本信息”的域名写上自己的域名,微信登陆时需要用到的;

 

二、到上面一大步设置完成后就可以开始我们的开发工作了;

1、用TP的小伙伴们可以用下面的包放到tp的扩展里,也可以自行到官网下载sdk包,具体目录:ThinkPHP\Library\Vendor\,其它就可以不用管啦;

2、打开包里的WxPayPubConfig.php文件,填写上你的微信支付的接口信息就好啦;

三、上面二大步都是配置,这一步就是写支付类了,其实也没什么的,复制粘贴就好了;

1、新建Wxpay控制器,当然你也可以自己命名,访问的名称要跟你在微信上配置的授权目录一样就好了;点击这里下载Wxpay

2、代码的地方就不多说了,下面直接上代码;

createOauthUrlForCode('域名/Wxpay/js_api_call?order_sn='.$order_sn);      //$url = $jsApi->createOauthUrlForCode(\WxPayConf_pub::JS_API_CALL_URL);      Header("Location: $url");    }else{      //获取code码,以获取openid      $code = $_GET['code'];      $jsApi->setCode($code);      $openid = $jsApi->getOpenId();    }    $res = array(      'order_sn' => '20150109113322',      'order_amount' => 255    );    //=========步骤2:使用统一支付接口,获取prepay_id============    //使用统一支付接口    $unifiedOrder = new \UnifiedOrder_pub();    //设置统一支付接口参数    //设置必填参数    //appid已填,商户无需重复填写    //mch_id已填,商户无需重复填写    //noncestr已填,商户无需重复填写    //spbill_create_ip已填,商户无需重复填写    //sign已填,商户无需重复填写    $total_fee = $res['order_amount']*100;    //$total_fee = 1;    $body = "订单支付{$res['order_sn']}";    $unifiedOrder->setParameter("openid", "$openid");//用户标识    $unifiedOrder->setParameter("body", $body);//商品描述    //自定义订单号,此处仅作举例    $out_trade_no = $res['order_sn'];    $unifiedOrder->setParameter("out_trade_no", $out_trade_no);//商户订单号    $unifiedOrder->setParameter("total_fee", $total_fee);//总金额    //$unifiedOrder->setParameter("attach", "order_sn={$res['order_sn']}");//附加数据    $unifiedOrder->setParameter("notify_url", \WxPayConf_pub::NOTIFY_URL);//通知地址    $unifiedOrder->setParameter("trade_type", "JSAPI");//交易类型    //非必填参数,商户可根据实际情况选填    //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号    //$unifiedOrder->setParameter("device_info","XXXX");//设备号    //$unifiedOrder->setParameter("attach","XXXX");//附加数据    //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间    //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间    //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记    //$unifiedOrder->setParameter("openid","XXXX");//用户标识    //$unifiedOrder->setParameter("product_id","XXXX");//商品ID    $prepay_id = $unifiedOrder->getPrepayId();    //=========步骤3:使用jsapi调起支付============    $jsApi->setPrepayId($prepay_id);    $jsApiParameters = $jsApi->getParameters();    $wxconf = json_decode($jsApiParameters, true);    if ($wxconf['package'] == 'prepay_id=') {      $this->error('当前订单存在异常,不能使用支付');    }    $this->assign('res', $res);    $this->assign('jsApiParameters', $jsApiParameters);    $this->display('jsapi');  }  //异步通知url,商户根据实际开发过程设定  public function notify_url() {    vendor('Weixinpay.WxPayPubHelper');    //使用通用通知接口    $notify = new \Notify_pub();    //存储微信的回调    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];    $notify->saveData($xml);    //验证签名,并回应微信。    //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,    //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,    //尽可能提高通知的成功率,但微信不保证通知最终能成功。    if($notify->checkSign() == FALSE){      $notify->setReturnParameter("return_code", "FAIL");//返回状态码      $notify->setReturnParameter("return_msg", "签名失败");//返回信息    }else{      $notify->setReturnParameter("return_code", "SUCCESS");//设置返回码    }    $returnXml = $notify->returnXml();    //==商户根据实际情况设置相应的处理流程,此处仅作举例=======    //以log文件形式记录回调信息    //$log_name = "notify_url.log";//log文件路径    //$this->log_result($log_name, "【接收到的notify通知】:\n".$xml."\n");    $parameter = $notify->xmlToArray($xml);    //$this->log_result($log_name, "【接收到的notify通知】:\n".$parameter."\n");    if($notify->checkSign() == TRUE){      if ($notify->data["return_code"] == "FAIL") {        //此处应该更新一下订单状态,商户自行增删操作        //$this->log_result($log_name, "【通信出错】:\n".$xml."\n");        //更新订单数据【通信出错】设为无效订单        echo 'error';      }      else if($notify->data["result_code"] == "FAIL"){        //此处应该更新一下订单状态,商户自行增删操作        //$this->log_result($log_name, "【业务出错】:\n".$xml."\n");        //更新订单数据【通信出错】设为无效订单        echo 'error';      }      else{        //$this->log_result($log_name, "【支付成功】:\n".$xml."\n");        //我这里用到一个process方法,成功返回数据后处理,返回地数据具体可以参考微信的文档        if ($this->process($parameter)) {          //处理成功后输出success,微信就不会再下发请求了          echo 'success';        }else {          //没有处理成功,微信会间隔的发送请求          echo 'error';        }      }    }  }  //订单处理  private function process($parameter) {    //此处应该更新一下订单状态,商户自行增删操作    /*    * 返回的数据最少有以下几个    * $parameter = array(      'out_trade_no' => xxx,//商户订单号      'total_fee' => XXXX,//支付金额      'openid' => XXxxx,//付款的用户ID    );    */    return true;  }}?>

四、以上就是微信支付的整个流程了,扫码支付的应该都差不多,我没去弄了,用过的朋友也可以分享下,^_^;来上几张支付的截图

 

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP微信支付开发实例
  • 微信支付PHP SDK之微信公众号支付代码详解
  • PHP实现微信支付(jsapi支付)流程步骤详解
  • ThinkPHP实现微信支付(jsapi支付)流程教程详解
  • php微信支付之APP支付方法
  • 微信小程序 支付功能实现PHP实例详解
  • PHP实现QQ、微信和支付宝三合一收款码实例代码
  • 微信小程序与php 实现微信支付的简单实例
  • ThinkPHP框架整合微信支付之JSAPI模式图文详解
  • ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
  • PHP实现的微信APP支付功能示例【基于TP5框架】


  • 上一条:
    ajax如何取thinkphp数据库
    下一条:
    ThinkPHP框架整合微信支付之刷卡模式图文详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • thinkphp + mongodb项目中数据加载慢问题分析及解决(0个评论)
    • thinkphp6框架中封装redis操作类(0个评论)
    • thinkphp6框架中实现定时任务功能流程步骤(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-12
    • 2018-01
    • 2018-02
    • 2020-03
    • 2021-07
    • 2021-12
    • 2022-05
    • 2022-06
    • 2022-09
    • 2023-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客