前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到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. Disabling the Windows 8 UAC

    http://www.computerperformance.co.uk/win8/windows8-uac-disable.htm https://msdn.microsoft.com/en-us/ ...

  2. DevExpress v17.2新版亮点—Mobile Controls篇

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Mobile Controls v17.2 的新功能,快来下载试用新版本! New ...

  3. L241

    Parents, try to get enough sleep to role model good habits to children. Bessesen notes that some med ...

  4. 网络编程(socket,套接字)

    服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程   网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...

  5. tomcat部署和启动

  6. encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别

    一.这四个方法的用处 1.用来编码和解码URI的 统一资源标识符,或叫做 URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串.除了e ...

  7. string用scanf读入(节省时间)

    #include <iostream> #include <stdio.h> #include <string.h> using namespace std; in ...

  8. Excel 设置标题栏

    1. 选中列表标题行, 可以设置字体居中显示,并放大字体以表示这是标题栏. 2. 选中列表第一数据行,即列表标题行下一行,选择View > Freeze Panes.

  9. 端到端文本识别CRNN论文解读

    CRNN 论文: An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Applica ...

  10. DoTween可视化编程用法详解

    DoTween可视化编辑 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新 ...