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

    从结构上看cas包括两个部分,CAS server 和CAS client 需要独立部署,主要负责用户的认证工作,CAS负责处理对客户端受保护资源的访问请求,需要登录时,重新定向到CAS Server ...

  2. net负载均衡服务器架构网址

    https://blog.csdn.net/orichisonic/article/details/71122291 https://blog.csdn.net/huangxiangec/articl ...

  3. 添加MyEclipse WebSphere Portal Server支持(一)

    [周年庆]MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 一.支持WebSphere Portal Server 本文档介绍了如何支持和开发 We ...

  4. SharePoint Web应用程序管理-PowerShell

    1. 显示场中的Web应用程序 Get-SPWebApplication 2. 获取指定的Web应用程序 $webApp = Get-SPWebApplication -Identity " ...

  5. WinRAR 0day漏洞 附利用过程

    英国安全机构Mohammad Reza Espargham的漏洞实验室发现,流行压缩工具WinRAR 5.21最新版里存在一个安全漏洞,目前该漏洞还属于零日漏洞,同时官方正在全力修补该漏洞.同时报告该 ...

  6. HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法

    一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...

  7. PHP webservice初探

    背景:在最近的开发中,为了解决公司内部系统与外部系统的对接,开始接触到了webservice接口,外部公司提供接口供我们调用,已达到数据同步的目的,因此有必要普及一下web service的知识了! ...

  8. SharePoint PeopleEditor控件使用

    以下用于简要介绍在SharePoint 2016二次开发中如何使用PeopleEditor人员选择器,并采用前端的方式获取和设置值. 一.在使用的.aspx页面进行注册 <%@ Register ...

  9. SQLyog Enterprise常用快捷键

    1. SQL格式化 F12 格式化当前行所在的SQL Ctrl+F12    格式化选中的SQL Shift+F12   格式化所有SQL 2. 窗口操作 Ctrl+T 打开一个新的查询窗口 Alt+ ...

  10. git代码回退

    情况1.还没有push可能 git add ,commit以后发现代码有点问题,想取消提交,用: reset git reset [--soft | --mixed | --hard] eg:  gi ...