TP3微信企业付款工具类

微信企业付款,企业转账工具类,企业向个人付款 微信企业付款,企业转账工具类,微信支付,企业向个人付款 立即下载
<?php
	namespace Admin\Controller;
	use Think\Controller;
	
	/*
	 * 该类用于企业转账
	 */
	class TransController extends Controller{
		
	   	private $appid = '';
	   	private $appsecret = '';
	    private $mchid = '';
	    private $key = '';
	    
	    
	    public function _initialize(){
	        
	        $paymentPlugin = M('Plugin')->where("code='weixin' and  type = 'payment' ")->find(); // 找到微信支付插件的配置
	        $config_value = unserialize($paymentPlugin['config_value']); // 配置反序列化
	        $this->appid = $config_value['appid']; // * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
	        $this->mchid = $config_value['mchid']; // * MCHID:商户号(必须配置,开户邮件中可查看)
	        $this->key = $config_value['key']; // KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
	        $this->appsecret = $config_value['appsecret']; // 公众帐号secert(仅JSAPI支付的时候需要配置),
	    }
	    
	   
    	
    	//企业付款调用该方法
	    public function trans($openID,$money,$nickname=''){
	    	$params = array(
	    		'partner_trade_no' => $this->createPayid(),//生成订单号
	    		'openid' => $openID,
	    		'check_name' => 'NO_CHECK',
	    		'amount' => $money*100,
	    		'desc' => $nickname.'余额提现',
	    	);
	    	
	    	//证书路径
	    	$apicent_cert = CERT_PATH . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR. 'payment' . DIRECTORY_SEPARATOR . 'weixin' . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem';
	        $apiclient_key  = CERT_PATH . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR. 'payment' . DIRECTORY_SEPARATOR . 'weixin' . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'apiclient_key.pem';
	    	//$ca = WWWROOT . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR. 'payment' . DIRECTORY_SEPARATOR . 'weixin' . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'rootca.pem';
	        
	        $res = $this->payToUser($params,$apicent_cert,$apiclient_key);
	        
	    	
	    	if($res->result_code=='SUCCESS'){
	    	    return true;//转账成功
	    	}else{
	    	    $return_message = (string)$res->err_code_des;
	    	    return $return_message;
	    	}
	    	
	    	//获取支付结果
	    	//dump($res);
//	    	object(SimpleXMLElement)#7 (10) {
//				  ["return_code"] => string(7) "SUCCESS"
//				  ["return_msg"] => object(SimpleXMLElement)#8 (0) {
//				  }
//				  ["mch_appid"] => string(18) "wx6634becf2098b785"
//				  ["mchid"] => string(10) "1380838302"
//				  ["device_info"] => object(SimpleXMLElement)#9 (0) {
//				  }
//				  ["nonce_str"] => string(15) "848141333395157"
//				  ["result_code"] => string(7) "SUCCESS"
//				  ["partner_trade_no"] => string(16) "2016110909251350"
//				  ["payment_no"] => string(28) "1000018301201611094809686639"
//				  ["payment_time"] => string(19) "2016-11-09 09:25:15"
//				}
	    	
	    	
	    }
    	
    	
    	
    	/**
		 *  array转xml
		 */
		public function arrayToXml($arr){
			
		    $xml = "<xml>";
		    foreach ($arr as $key=>$val)
		    {
		        if (is_numeric($val))
		        {
		               $xml.="<".$key.">".$val."</".$key.">"; 
		
		        }
		        else
		        $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
		    }
		    $xml.="</xml>";
		    return $xml; 
		}
		
		
		public function createNoncestr( $length = 15 ) {
			$chars = "01234567890123456789";  
			$str ="";
			for ( $i = 0; $i < $length; $i++ )  {  
				$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
			}  
			return $str;
		}
		
		/**
	    *   作用:使用证书,以post方式提交xml到对应的接口url
	    */
	    public function postXmlSSLCurl($xml, $url, $second, $cert, $key){
	    	
	        $ch = curl_init();
	        //超时时间
	        curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this->timeout);
	        
	        //这里设置代理,如果有的话
	        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
	        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
	        curl_setopt($ch,CURLOPT_URL, $url);
	        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
	        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
	        //设置header
	        curl_setopt($ch,CURLOPT_HEADER,FALSE);
	        //要求结果为字符串且输出到屏幕上
	        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
	        //设置证书
	        //使用证书:cert 与 key 分别属于两个.pem文件
	        //默认格式为PEM,可以注释
	        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
	        curl_setopt($ch,CURLOPT_SSLCERT,$cert);
	        //默认格式为PEM,可以注释
	        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
	        curl_setopt($ch,CURLOPT_SSLKEY, $key);
	        
	        //curl_setopt ($ch, CURLOPT_CAINFO, $ca);
	        //post提交方式
	        curl_setopt($ch,CURLOPT_POST, true);
	        curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
	        $data = curl_exec($ch);
	        
	        //返回结果
	        if($data){
	        	curl_close($ch);
	        	//file_put_contents("./nimamama",$data);
	            $restran = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);//解析XML到对象
	    		//$restran = json_decode($restran,true);
	            return $restran;
	        }
	        else {
	            $error = curl_errno($ch);
	            echo "curl出错,错误码:$error"."<br>"; 
	            curl_close($ch);
	            return false;
	        }
	    }
	    
	    
	    
	    //生成订单号(最好在其它业务里生成该订单号,传到该类需要的函数中,Powered BY UNIX8.NET)
	    public function createPayid()
	    {
	        return date('Ymdhis', time()) . substr(floor(microtime() * 1000), 0, 1) . rand(0, 9);
	    }
	    
	    
	    
	    //企业向个人付款
	    public function payToUser($params, $apicent_cert, $apiclient_key) {
	        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
	        
	        //检测必填参数
	        if($params["partner_trade_no"] == null) {   //
	            exit("退款申请接口中,缺少必填参数partner_trade_no!"."<br>");
	        }elseif($params["openid"] == null){
	            exit("退款申请接口中,缺少必填参数openid!"."<br>");
	        }elseif($params["check_name"] == null){             //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
	            exit("退款申请接口中,缺少必填参数check_name!"."<br>");
	        }elseif(($params["check_name"] == 'FORCE_CHECK' or $params["check_name"] == 'OPTION_CHECK') && ($params["re_user_name"] == null)){  //收款用户真实姓名。
	            exit("退款申请接口中,缺少必填参数re_user_name!"."<br>");
	        }elseif($params["amount"] == null){
	            exit("退款申请接口中,缺少必填参数amount!"."<br>");
	        }elseif($params["desc"] == null){
	            exit("退款申请接口中,缺少必填参数desc!"."<br>");
	        }
	        
	        $params["mch_appid"] = $this->appid;//公众账号ID
	        $params["mchid"] = $this->mchid;//商户号
	        $params["nonce_str"] = $this->createNoncestr();//随机字符串
	        $params['spbill_create_ip'] = $_SERVER['REMOTE_ADDR'] == '::1' ? '192.127.1.1' : $_SERVER['REMOTE_ADDR'];//获取IP
	        
	        
	        $params["sign"] = $this->getSign($params);//获取签名
	        
	        $xml = $this->arrayToXml($params);
	        
	        return $this->postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);
	    }
	    
	    
	    public function formatBizQueryParaMap($paraMap, $urlencode)
		{
			//var_dump($paraMap);//die;
			$buff = "";
			ksort($paraMap);
			foreach ($paraMap as $k => $v)
			{
				if($urlencode)
				{
					$v = urlencode($v);
				}
				//$buff .= strtolower($k) . "=" . $v . "&";
				$buff .= $k . "=" . $v . "&";
			}
			$reqPar;
			if (strlen($buff) > 0)
			{
				$reqPar = substr($buff, 0, strlen($buff)-1);
			}
			//var_dump($reqPar);//die;
			return $reqPar;
		}
		
		/**
		 * 	作用:生成签名
		 */
		public function getSign($Obj)
		{
			//var_dump($Obj);//die;
			foreach ($Obj as $k => $v)
			{
				$Parameters[$k] = $v;
			}
			//签名步骤一:按字典序排序参数
			ksort($Parameters);
			$String = $this->formatBizQueryParaMap($Parameters, false);
			//echo '【string1】'.$String.'</br>';
			//签名步骤二:在string后加入KEY
			$String = $String."&key=".$this->key;
			//echo "【string2】".$String."</br>";
			//签名步骤三:MD5加密
			$String = md5($String);
			//echo "【string3】 ".$String."</br>";
			//签名步骤四:所有字符转为大写
			$result_ = strtoupper($String);
			//echo "【result】 ".$result_."</br>";
			return $result_;
		}

	    
	    
	    
    
    
	}

?>


微信商户号支付工具类 企业付款所需ssl发送post请求 微信商户号支付工具类,如:企业付款所需ssl发送post请求、生成签名字符串、解析xml... 立即下载

相关推荐

微信公众号支付签名生成工具类和xml转换工具类和双向验证请求工具类

微信公众号支付签名生成工具类和xml和map转换工具类和双向验证请求工具类

简析SoBit 跨链桥图文教程

1.在您的网络浏览器中启动SoBit Bridge应用程序。2.选择SoBit界面右上角的比特币网络来连接您的数字钱包。从下拉菜单中选择’BTC’作为源链,’SOL’(Solana)作为目标链。在’数量’字段中指定您希望桥接的BRC20代币数量。确保您的钱包中有足够的余额。如果适用,勾选框以确认服务不适用于美国个人和实体。跟随钱包提示选择合适的铭刻费用。做好准备,Unisat/OKX钱包将要求确认两次。当铭刻成功时,在您的钱包中确认并支付交易。一旦转移启动,将生成一个交易ID。

caidhue的博客 1497

企业微信PHP-SDK(ThinkPHP5.*版本)

这是企业微信的PHP-SDK,根据需要改写成ThinkPHP5.*版本下的extend拓展库格式,只需按照Tp5的extend第三方类库方法加载此SDK即可使用

APP在使用中出现崩溃、闪退的情况,是什么原因引起的

APP在使用中出现崩溃、闪退的情况,是什么原因引起的 一.常见的原因 1.缓存垃圾过多 由于安卓系统的特性,长时间不清理缓存,会导致越来越卡,也会出现闪退的情况 2.运行的程序过多,引起的内存不足现象 由于部分手机运行程序过多,手机本身内存比较少,容易出现闪退问题, 3.应用版本的兼容性问题 3.1应用版本兼容性问题 应用版本太低,会导致不兼容,引起闪退;有些新发布的版本,还在调试中也可能会出现闪退的问题 3.2APP中的SDK和手机的兼容性问题 4.APP中访问网络的地方部分组件未加载 组件中的Image

梦途的测开笔记 1万+

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文针对7系列ZYNQ开发中Vitis无法识别ARM DAP的典型硬件调试问题,提供了系统性的排查与解决方案。文章深入剖析了问题本质,指出ARM DAP无法访问的核心原因在于PS部分的电源、时钟或复位等硬件基础条件未满足,并重点强调了PS参考时钟(如33.333MHz晶振)的完整性是关键排查点。通过从电源完整性、时钟与复位信号到JTAG连接与焊接的逐步硬件排查,并结合软件配置交叉验证,为开发者提供了清晰的故障定位思路与实战指南。

weixin_29280657的博客 627

CMake安装grpc生成gRPCTargets.cmake文件

以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的程序,发现无法调用gRPC的CMake文件,错误提示如下所示: include could not find load file: /usr/local/lib/cmake/g...

2331

tp5支付宝支付

ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对账单等。可以在GitHub下载: https://github.com/dream2023/ThinkPHP5-alipay下载下来如下打开application文件夹把common复制到自己项目的application中打开example模块,把Notify.php复制到自己的项目的control...

weixin_42122979的博客 1万+

Zabbix故障排查10051端口无法启动:zabbix-server.service: main process exited, code=exited, status=1/FAILURE

zabbix-server.service: main process exited, code=exited, status=1/FAILURE报错说与数据库失去连接。

" DevOps菜鸟(Xu JieHao)" 的博客 2257

php支付宝付款码支付,php支付宝APP支付功能

本文实例为大家分享了php支付宝APP支付的具体代码,供大家参考,具体内容如下支付宝网页支付1.支付宝开放平台添加应用,获得appid,并签约。2.在支付宝开放品台设置如下:3.配置支付宝的应用公钥。(根据支付宝的文档)4.在开放平台下载官方sdk demo。5.代码://支付宝include_once VENDOR_PATH . 'Alipay/aop/AopClient.php';includ...

weixin_30092051的博客 917

2024最新指南:如何用Python批量下载Sentinel-2数据(附避坑清单)

本文提供2024年最新Python批量下载Sentinel-2遥感数据的完整指南,涵盖环境配置、API准备、核心下载流程实现及实战避坑清单。通过智能查询器、断点续传下载器等实用工具,帮助用户高效获取遥感数据,避免常见网络问题和数据完整性验证失败。

silver的专栏 619

A*(star)算法原理讲解以及程序实现(基于Python)

本文将以迷宫探索最优路径为例,讲解A *搜索算法原理及其程序实现。在原理讲解部分,首先从为什么要使用A *搜索算法和A *搜索算法的全局最优逻辑出发,讲解A *算法的原理。其次对A *的行动函数g(n)和启发函数h(n)的细节进行了讲解说明,并补充了启发函数的选择对于A *算法的影响。在程序实现部分,首先从程序流程框图出发,解释A *算法的流程。其次按函数的类划分并讲解主要代码,接着展示程序的运行结果,最后对A *算法进行总结分析。

m0_73366745的博客 8282

CTFshow SSTI

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。模板引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。SSTI 就是服务器端模板注入(Server-Side Template Injection)

starttv的博客 1507

基于FFT的轴承故障诊断 - MATLAB代码和详细解释

最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。

COWizard的博客 613

tp3.2中企业向个人微信钱包零钱付款

第一步:去商户平台账户中心->API安全下载证书会得到一个包cert. 第二步:将cert放入项目根目录下Static/Common/ 第三步:将第三方企业向个人付款类库包Weixin放入Application/Common/Libs,类库包Weixin里面目录结构如下图: 第四步:打开lib里面的WxPay.Config.php文件,证书路径如下所示: //=======【证书路径设置】

tjg888888的博客 2万+

PCL CSF布料模拟算法【2026最新版】

CSF布料模拟地面滤波算法的PCL实现,博客长期更新,本文最近更新时间为:2026年10月26日。

点云侠的博客 3918

《模型轻量化-剪枝蒸馏量化系列》YOLOv5无损剪枝(附源码)

无损剪枝模型到几百kb~

cv君的博客 3万+

tp5微信开发(五)--- tp5微信企业付款到零钱开发实践

项目需求:客户有一个分销项目,需要对分享获得的奖励直接发放至客户零钱钱包。 开发文档传送门:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 企业付款到用户零钱开通条件: 1、商户号(或同主体其他非服务商商户号)已入驻90日 2、商户号(或同主体其他非服务商商户号)有30天连续正常交易 ...

优倍素材网技术总结 3337

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

tp5中使用easywechat完成企业付款到用户微信钱包

第一步:使用composer工具在框架中安装easywechat,并将证书放在框架根目录cert里(如果没该目录,则新建一个) 第二步:在控制器中使用: 类开始的时候引入: use EasyWeChat\Factory; 方法中使用: $rootPath = ROOT_PATH; $config = [ // 必要配置 'app_id' =&g...

tjg888888的博客 3705

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PHP微信商户支付企业付款到零钱功能

一 开通条件,就是首先要在微信平台设置好。 以下微信文档里有的,我这里大概掠几项比较重要的。 付款资金 企业付款到零钱资金使用商户号余额资金。 根据商户号的账户开通情况,实际出款账户有做区别: ◆ 默认情况下,企业付款到零钱使用商户号基本户(或余额账户)余额。如商户号已开通运营账户,则企业付款到零钱使用运营账户内的资金。 ◆ 基本户(或上述其他出款账户)的资金来源,...

weixin_30519071的博客 162

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

tp5 微信企业付款到零钱

tp5 微信企业付款到零钱

wanganji5252的博客 755

微信开发系列----企业付款到银行卡接口开发

一、微信商户号须开通此功能; 二、应用环境TP5+Mysql+Centos三、编写代码3.1、Model层,Wechat.php <?php namespace app\home\model; use think\Cache; class Wechat extends Model { private $appid; ...

weixin_33875564的博客 1443

tp5微信提现

【代码】tp5微信提现。

小聪的博客 339

TP5微信提现 商家转账到零钱(复制皆可用)

TP5提现,对接商家转账到零钱。(复制皆可用)

success_a的博客 3780
上一篇: include,include_once,require,require_once的区别
下一篇: GET与POST的重大区别
小科灬
博客等级 码龄11年 12粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值