Thinkphp 5.0实现微信企业付款到零钱
时间:2022-07-27
本文章向大家介绍Thinkphp 5.0实现微信企业付款到零钱,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了Thinkphp 5.0 微信企业付款到零钱的具体代码,供大家参考,具体内容如下
【微信支付】企业付款到零钱:官方文档
注意:1,证书路径一定要写绝对路径,且使用函数getcwd()。
function transfer($data){
//支付信息
$wxchat['appid'] = WxPayConfig::$appid;
$wxchat['mchid'] = WxPayConfig::$mchid;
$webdata = array(
'mch_appid' = $wxchat['appid'],//商户账号appid
'mchid' = $wxchat['mchid'],//商户号
'nonce_str' = md5(time()),//随机字符串
'partner_trade_no'= date('YmdHis'), //商户订单号,需要唯一
'openid' = $data['openid'],//转账用户的openid
'check_name'= 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
'amount' = $data['money']*100, //付款金额单位为分
'desc' = '微信企业付款到零钱',//企业付款描述信息
'spbill_create_ip' = request()- ip(),//获取IP
);
foreach ($webdata as $k = $v) {
$tarr[] =$k.'='.$v;
}
sort($tarr);
$sign = implode($tarr, '&');
$sign .= '&key='.WxPayConfig::$key;
$webdata['sign']=strtoupper(md5($sign));
$wget = $this- ArrToXml($webdata);//数组转XML
$pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';//api地址
$res = $this- postData($pay_url,$wget);//发送数据
if(!$res){
return array('status'= 1, 'msg'= "Can't connect the server" );
}
$content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
if(strval($content- return_code) == 'FAIL'){
return array('status'= 1, 'msg'= strval($content- return_msg));
}
if(strval($content- result_code) == 'FAIL'){
return array('status'= 1, 'msg'= strval($content- err_code),':'.strval($content- err_code_des));
}
$rdata = array(
'mch_appid' = strval($content- mch_appid),
'mchid' = strval($content- mchid),
'device_info' = strval($content- device_info),
'nonce_str' = strval($content- nonce_str),
'result_code' = strval($content- result_code),
'partner_trade_no' = strval($content- partner_trade_no),
'payment_no' = strval($content- payment_no),
'payment_time' = strval($content- payment_time),
);
return $rdata;
}
//数组转XML
function ArrToXml($arr)
{
if(!is_array($arr) || count($arr) == 0) return '';
$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;
}
//发送数据
function postData($url,$postfields){
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $postfields;
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//以下是证书相关代码
$params[CURLOPT_SSLCERTTYPE] = 'PEM';
$params[CURLOPT_SSLCERT] = getcwd().'/plugins/payment/weixin/cert/apiclient_cert.pem';//绝对路径
$params[CURLOPT_SSLKEYTYPE] = 'PEM';
$params[CURLOPT_SSLKEY] = getcwd().'/plugins/payment/weixin/cert/apiclient_key.pem';//绝对路径
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 几个不常用但特别实用的PHP预定义变量
- tomcat源码解读六 tomcat中的session生命历程
- tomcat源码解读五 Tomcat中Request的生命历程
- PostQueuedCompletionStatus
- tomcat源码解读四 tomcat中的processer
- tomcat源码解读三(2) tomcat中JMX的源码分析
- 程序的入口
- tomcat源码解读三(1) tomcat的jmx管理
- 利用xinetd实现简单web服务器(镜像站)
- tomcat源码解读二 tomcat的生命周期
- IOCP反射服务器
- 给PHP开发者讲讲PHP源码-第二部分
- 给PHP开发者讲讲PHP源码-第一部分
- tomcat源码解读一 Digester的解析方式
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Python 爬虫进阶必备 | 某外卖优惠平台内容加密参数分析
- pytest 自动化测试框架(二)
- Web | Django 与数据库交互,你需要知道的 9 个技巧
- 商机负责人与商机团队负责人不一致时更新团队负责人为商机负责人语句
- mysql常用语句集合(仅供工作日常学习参考)
- 新一代Notebook神器出现,Jupyter危险了!
- vmstat 监视内存使用情况
- Android开发重写Animation实现下拉图片后弹射回去效果示例
- Android 中RxPermissions 的使用方法详解
- Android构建Material Design应用详解
- Android中DrawerLayout实现侧滑菜单效果
- Android获取系统储存以及内存信息的方法(一)
- Android开发实现读取excel数据并保存为xml的方法
- 详解Kotlin 中使用和配置 Dagger2
- Android开发使用自定义View将圆角矩形绘制在Canvas上的方法