前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2

把微信支付类、企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了:

把Payment整个文件夹放到\ThinkPHP\Library\Vendor文件夹下面,

打开WxPay.pub.config.php,配置四个参数即可,然后把微信提供的证书放到caccert文件夹;这样就完成了支付和企业付款的所有代码配置!

//=======【基本信息设置】=====================================
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
const APPID = '';
//受理商ID,身份标识
const MCHID = '';
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看
const KEY = '';
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
const APPSECRET = '';

在 Application/Home/Controller目录,建立WxPayController.class.php,下面是公众号支付和扫码支付模式2的方法

/*微信公众号支付*/
public function jsapi($openid,$amount){
Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
//使用jsapi接口
$jsApi = new \Vendor\Payment\WxPay\WxPayPubHelper\JsApi_pub();
//=========步骤1:网页授权获取用户openid============
//通过code获得openid //=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$unifiedOrder = new \Vendor\Payment\WxPay\WxPayPubHelper\UnifiedOrder_pub(); //设置统一支付接口参数
//设置必填参数
$unifiedOrder->setParameter("openid","$openid");//商品描述
$unifiedOrder->setParameter("body","充值");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no =$timeStamp;
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder->setParameter("total_fee",$amount*100);//总金额
$unifiedOrder->setParameter("notify_url",$this->notify_url);//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
$prepay_id = $unifiedOrder->getPrepayId(); //=========步骤3:使用jsapi调起支付============
$jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters();
$data['jsApiParameters'] = $jsApiParameters;
$data['out_trade_no'] = $out_trade_no;
return $data;
} //JSAPI支付通知
public function notify(){
//使用通用通知接口
Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
$notify = new \Vendor\Payment\WxPay\WxPayPubHelper\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();
echo $returnXml; //==商户根据实际情况设置相应的处理流程,此处仅作举例======= //以log文件形式记录回调信息
$log_name= dirname(__FILE__)."/../../../Public/Weixin/notify_url.log";//log文件路径
$log_ = new \Vendor\Payment\WxPay\WxPayPubHelper\Log_();
$log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n"); if($notify->checkSign() == TRUE)
{
if ($notify->data["return_code"] == "FAIL") {
//此处应该更新一下订单状态,商户自行增删操作
$log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
}
elseif($notify->data["result_code"] == "FAIL"){
//此处应该更新一下订单状态,商户自行增删操作
$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
}
else{
//此处应该更新一下订单状态,商户自行增删操作
$log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
//商户自行增加处理流程,
//例如:更新订单状态
//例如:数据库操作
//例如:推送支付完成信息 } }
} //微信扫码支付 模式2
public function native_pays($amount){
//全局引入微信支付类
Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
//使用统一支付接口
$unifiedOrder = new \Vendor\Payment\WxPay\WxPayPubHelper\UnifiedOrder_pub(); //设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder->setParameter("body","充值");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = $timeStamp.$this->user_id;
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder->setParameter("total_fee",$amount*100);//总金额
$unifiedOrder->setParameter("notify_url", $this->notify_url);//通知地址
$unifiedOrder->setParameter("trade_type","NATIVE");//交易类型
//非必填参数,商户可根据实际情况选填
//$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 //获取统一支付接口结果
$unifiedOrderResult = $unifiedOrder->getResult(); //商户根据实际情况设置相应的处理流程
// if ($unifiedOrderResult["return_code"] == "FAIL")
// {
// //商户自行增加处理流程
// echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
// }
// elseif($unifiedOrderResult["result_code"] == "FAIL")
// {
// //商户自行增加处理流程
// echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
// echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";
// }
if($unifiedOrderResult["code_url"] != NULL)
{
//从统一支付接口获取到code_url
$code_url = $unifiedOrderResult["code_url"];
//商户自行增加处理流程
//......
}
//$this->assign('out_trade_no',$out_trade_no);
//$this->assign('code_url',$code_url);
//$this->assign('unifiedOrderResult',$unifiedOrderResult);
$data['out_trade_no'] = $out_trade_no;
$data['result'] = $unifiedOrderResult;
return $data;
// $this->display("Home@WxPay:native_pays");//扫码模板
// exit;
}

然后在IndexController 写一个调用微信支付的方法

/*微信支付*/
public function wxpay(){
$openid = "ovOFkwccfw7PsERjKyhrZyDGm1-4";//"ovOFkwXd1PPolPDSH9ILyFMlRdF8";
$amount = 1;
$pay = A("Home/WxPay");
$res = $pay->jsapi($openid,$amount);
print_r($res['jsApiParameters']);
$this->assign("jsApiParameters",$res['jsApiParameters']);
$this->display("");
}

这样就完成thinkphp接入微信支付了,手机访问:域名/index.php/Home/Index/wxpay ,测试截图:

在前面我们已经payment文件夹的ThinkPHP/Library/Vendor/Payment/WxPay/WxPayPubHelper/WxPayPubHelper.php 包含了 企业付款类

直接在IndexController 写一个调用企业付款的方法,看到吧,封装好后,调用就是这么简单

/*企业付款*/
function merchpay(){
header("Content-type: text/html; charset=utf-8");
Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
$obj = new \Vendor\Payment\WxPay\WxPayPubHelper\MerchPay();
$openid = 'ovOFkwXd1PPolPDSH9ILyFMlRdF8';
$trade_no = date('YmdHis').mt_rand(1000,9999);
$res = $obj->pay($openid,$trade_no,1,'提现');
print_r($res);
return $res;
}

手机打开测试截图:

  

这样就完成了thinkphp接入微信支付、微信企业付款。

新增了接入微信扫码支付和整理了接入教程,这样电脑也可以使用微信扫码支付了!

需要完整代码和教程的 可以加 851 488 243(备注:TP微信支付)

												

thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5的更多相关文章

  1. 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付.APP微信支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存. 先说注意 ...

  2. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

  3. asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1

    2018-08-13更新生成二维码的方法 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付.H5支付.公众号支付.App支付等,本人使用的是asp.net mvc c ...

  4. Java微信公众平台开发之扫码支付模式一

    官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了大体过程:先扫码(还没有确定实际要支付的金额),这个码是商品的二维码,再生 ...

  5. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  6. ASP.NET Core 2.0 支付宝当面付之扫码支付

    前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并 ...

  7. 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

  8. 微信公众号 扫码支付 模式二 demo

    扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?ch ...

  9. .NET Core之微信支付之公众号、H5支付篇

    前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...

随机推荐

  1. myeclipse设置jvm参数的三种方式

    方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit” ...

  2. Java——使用File类递归遍历指定路劲下的所有文件

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  3. MyEclipse教程:使用UML创建模块库——第一部分(一)

    MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中 ...

  4. 解决:编辑一条彩信,附件选择添加音频,返回到编辑界面选择play,不能播放,没有声音

    [操作步骤]:编辑一条彩信,附件选择添加音频(外部音频),返回到编辑界面选择play,菜单键选择view slideshow [测试结果]:不能播放,没有声音 [预期结果]:可以播放 根据以往的经验( ...

  5. 这是一个专注于电脑技术、软件应用、互联网、嵌入式,电子技术行业等的原创IT博客

    http://www.choovin.com/ 这是一个专注于电脑技术.软件应用.互联网.嵌入式,电子技术行业等的原创IT博客

  6. Linux IO模式-阻塞io、非阻塞io、多路复用io

    一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对3 ...

  7. dependencies与dependencyManagement的区(转自:http://blog.csdn.net/liutengteng130/article/details/46991829)

    在上一个项目中遇到一些jar包冲突的问题,之后还有很多人分不清楚dependencies与dependencyManagement的区别,本篇文章将这些区别总结下来. 1.DepencyManagem ...

  8. Windows Phone 8, 添加Map控件

    摘要: 1. 添加Map控件到程序. 2. 在Map控件中显示您当前的位置. 内容: 首先在WMAppManifest.xml中的Capabilities选项卡中勾选如下两项:ID_CAP_MAP, ...

  9. pip source

    linux版本 sudo vim .pip/pip.conf[global]index-url = http://pypi.douban.com/simple[install]trusted-host ...

  10. dir matlab

    %file=dir('D:\dataset\temp');file=dir('D:\dataset\INRIAPerson\test_64x128_H96\pos');for i=3:length(f ...