微信支付 “商家转账到零钱”
目录
一、日常填坑:注意事项
二、代码示例
1.微信服务层
2.请求层
总结
一、日常填坑:注意事项
1:转账低于5毛会失败
2:转账金额需要自己取整一下,不然运气来了会出现以下问题
{ "code":"PARAM_ERROR","detail":{"location":"body","value":7.000000000000001 // 微信金额除不尽出现的问题},"message":" 无法将 JSON 输入源“\/body\/total_amount”映射到目标字段“转账总金额”中,此字段需要一个合法的 64 位有符号整数"}
二、代码示例
1.服务层
const SSLCERT_PATH = '证书路径';const SSLKEY_PATH = '证书key路径';const MCHID = '商户号';const APPID = 'app_id';const KEY = 'key值';/*** 付款到微信零钱* sOpenid:收款方openid* nMoney:转账金额*/public function transfer_batches($sOpenid, $nMoney){// 付款到零钱方法url$url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';// 订单号$sOrderId = '测试付款' . time();// 转账备注 (微信用户会收到该备注) $tRemark = '测试付款' . $sOrderId; // 转账金额:微信是分为单位 *100 转换 $transfer_amount = $nMoney * 100;// 转账接收列表设置$transfer_detail_list = array( ['out_detail_no' => $sOrderId, // 明细单号'transfer_amount' => intval($transfer_amount), // 转账总金额 'transfer_remark' => $tRemark, // 单条转账备注'openid' => $sOpenid, // 收款方openid// 'user_name' => '张三',// 转账金额 >= 2,000元,收款用户姓名必填 ],);// 请求参数设置$params = [ // 请求参数设置'appid' => self::APPID, // 文档顶部定义'out_batch_no' => $sOrderId, // 商家批次单号'batch_name' => 'x年x月转账', // 转账的名称 'batch_remark' => 'x年x月转账', // 转账的备注'total_amount' => intval($transfer_amount), // 转账总金额'total_num' => 1, // 转账总笔数'transfer_detail_list' => $transfer_detail_list, // 转账接收列表];// 获取token$token = $this->getToken($params);// 发送请求 $res = $this->https_request($url, json_encode($params), $token);// 反馈数组化 $resArr = json_decode($res, true); dump($resArr);// 存储转账成功信息或别的操作// 成功实例返回值{"out_batch_no": "plfk2020042013", // wx唯一识别号"batch_id": "1030000071100999991182020050700019480001", // 商家批次单号"create_time": "2015-05-20T13:29:35.120+08:00" // 创建时间 }}/*** 构造请求*/function https_request($url, $data = null, $token){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, (string)$url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)) {curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 添加请求头$headers = ['Authorization:WECHATPAY2-SHA256-RSA2048 ' . $token,'Accept: application/json','Content-Type: application/json; charset=utf-8','User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',];if (!empty($headers)) {curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);}$output = curl_exec($curl);curl_close($curl);return $output;}/*** 获取token*/public function getToken($pars){$url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';$http_method = 'POST'; // 请求方法(GET,POST,PUT)$timestamp = time(); // 请求时间戳$url_parts = parse_url($url); // 获取请求的绝对URL$nonce = $timestamp . rand('10000', '99999'); // 请求随机串$body = json_encode((object)$pars); // 请求报文主体$stream_opts = ["ssl" => ["verify_peer" => false,"verify_peer_name" => false,]];// 证书路径信息:文档顶部定义$apiclient_cert_path = self::SSLCERT_PATH;$apiclient_key_path = self::SSLKEY_PATH;$apiclient_cert_arr = openssl_x509_parse(file_get_contents($apiclient_cert_path, false, stream_context_create($stream_opts)));// 证书序列号$serial_no = $apiclient_cert_arr['serialNumberHex'];// 密钥 $mch_private_key = file_get_contents($apiclient_key_path, false, stream_context_create($stream_opts));// 商户id:文档顶部定义 $merchant_id = self::MCHID; $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));$message = $http_method . "\n" .$canonical_url . "\n" .$timestamp . "\n" .$nonce . "\n" .$body . "\n";openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');// 签名$sign = base64_encode($raw_sign); $schema = 'WECHATPAY2-SHA256-RSA2048';$token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $merchant_id, $nonce, $timestamp, $serial_no, $sign); // 微信返回tokenreturn $token;}
2.控制层
public function onTransferBatches($openid, $nMoney){// 实例化服务层$serviceTransfer = new serviceTransfer();// 带参请求:sOpenid(收款方openid) nMoney(转账金额)$result = $serviceTransfer->transfer_batches($openid, $nMoney);return $result;}
微信支付 “商家转账到零钱”相关推荐
- PHP微信支付 “商家转账到零钱”一文概述
PHP微信支付 商家转账到零钱 这里有个坑 1:转账低于5毛会失败 2:转账金额需要自己取整一下,微信官方金额是 分 为单位,换算成 元 时可能会除不尽 { "code":&quo ...
- 微信支付 商家转账到零钱 Api 过程
企业付款到零钱,已经限额500以内,完全不够用 商家转账到零钱,限额20000单笔,需要申请要按不通过原因修改多试几次 准备前提: 1,平台证书,商家证书,一共2个: 2,设置APIv3密钥: 正文: ...
- php微信提现(商家转账到零钱)
/*** 微信提现**/public function ty_commission(){ //这里是自己的逻辑代码,查询这个提现订单的信息等.....$batch_name = '余额提现';//转账 ...
- 平台资金提现解决方案之实现微信商家转账到零钱功能
大家好,我是小悟 使用场景 不管是做APP.电脑网站.手机网站还是小程序,为了推广基本上都离不开用户分佣的场景. 换句话说就是在其平台内为每个用户设置"电子钱包"功能,而电子钱包在 ...
- 微信支付:商家转账到零钱的开发
主要所需:1.微信商户平台的证书apiclient_cert.pem 2.微信商户平台证书的密钥apiclient_key.pem 3.微信商户平台的证书的序列号 一.转账所需字段 public cl ...
- c# 微信支付V3商家转账到零钱避坑宝典(二)
上篇文章经过开通商家转账到零钱,以及设置安全证书,APIv3密钥,接下来访问接口,获取证书的key,以及密钥. 废话不多说,上酸菜,不对,上代码. 一.首先小程序appid,商户号,证书编号,后台配置 ...
- cms小猪o2o企业付款配置中微信提现配置实现商家转账到零钱(企业付款到零钱)解决:“操作失败!产品权限验证失败,请查看您当前是否具有该产品的权限“的错误提示
先说下概念什么是商家转账到零钱?其实这个功能是由企业付款到零钱功能演变过来的,微信支付里面在2022年5月之前这个功能一直叫"企业付款到零钱"后来因为业务需求改成了"商家 ...
- 如何提升商家转账到零钱的免密支付额度 总限额及笔数
商家转账提供商户同时向多个用户微信零钱转账的能力,商户可以使用商家转账,用于费用的报销.员工福利发放.合作伙伴贷款及服务款项支付等多种场景,提高转账效率. 产品特点 高效:支持页面及API接口转账方式 ...
- 微信“商家转账到零钱“功能接入以及如何获得转账结果?
先说答案:无法即时获得转账结果 首先按照商家转账到零钱文档接入,发现响应结果中没有转账成功或者失败的结果 使用通过微信批次单号查询批次单和通过微信明细单号查询明细单接口进行转账结果查询,发现无法即时获 ...
- 基于微信云开发的商家转账至零钱
基于微信云开发的商家转账至零钱 相关简介 开通功能 阅读文档 技术框架 配置环境 编写代码 注意事项 相关参考 相关简介 本篇文章主要介绍如何通过微信云开发的云函数实现商家转账到零钱.(让那些没有服务 ...
最新文章
- 基于Mean-shift算法跟踪对象
- 计算机硬件类 计算机网络基础,计算机硬件类计算机网络基础1.doc
- Word 2010中利用尾注添加参考文献(论文必备)
- c语言编程将图片上下翻转,C语言实现矩阵翻转(上下翻转、左右翻转)
- 理解ArcIMS投影元素
- 麻省理工学院研究人员设计出针对幽灵党和熔毁的DAWG方法
- [react] 有在项目中使用过Antd吗?说说它的好处
- “睡服”面试官系列第八篇之iterator(建议收藏学习)
- 商用彩信服务成为企业3G应用新需求
- 二叉树 根据前序遍历 中序遍历 写出后序遍历
- WebMvc中MultipartFile文件上传
- 读程序员网游专题云风的文章有感
- Debugging with GDB 用GDB调试多线程程序
- 解决基于html5video标签多个视频同时播放的问题
- 通达OAV12报表中心
- php 24字母和 数字进行转化
- 码绘VS手绘(二)动态绘图
- 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
- 代理沙特SASO贸促会认证
- 7-1 厘米换算英尺英寸 (15 分)