<?phpnamespace app\common\service;use app\common\exception\BaseException;class WechatPayTransfer
{protected $wxapp = [];public function __construct($wxapp){$this->wxapp = $wxapp;}/*** 商家转账到零钱(公众号:程序员在囧途)* @param $batch_name* @param $out_trade_no* @param $money* @param $openid* @throws BaseException*/public function transfer($batch_name, $out_trade_no, $money, $openid){$url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';$pars = [];$pars['appid'] = $this->wxapp['app_id'];//直连商户的appid$pars['out_batch_no'] = 'batch' . $out_trade_no;//商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一$pars['batch_name'] = $batch_name;//该笔批量转账的名称$pars['batch_remark'] = $batch_name;//转账说明,UTF8编码,最多允许32个字符$pars['total_amount'] = intval($money * 100);//转账总金额 单位为“分”$pars['total_num'] = 1;//转账总笔数$pars['transfer_detail_list'][0] = ['out_detail_no' => 'transfer' . $out_trade_no,'transfer_amount' => $pars['total_amount'],'transfer_remark' => $batch_name,'openid' => $openid];//转账明细列表$token = $this->getToken($pars);//获取token$res = $this->https_request($url, json_encode($pars), $token);//发送请求$data = json_decode($res, true);if(isset($data['batch_id']) && $data['batch_id']){return $data;}return [];}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;}public function getToken($pars){// $url = 'https://api.mch.weixin.qq.com/v3/certificates';$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,]];try {$certPem = $this->getCertPem();$apiclient_cert_path = $certPem['certPem'];$apiclient_key_path = $certPem['keyPem'];$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));//密钥$merchant_id = $this->wxapp['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);//微信返回token} catch (\Exception $e) {throw new BaseException(['msg' => $e->getMessage()]);}return $token;}/*** 获取cert证书文件* @return array* @throws BaseException*/private function getCertPem(){if (empty($this->wxapp['cert_pem']) || empty($this->wxapp['key_pem'])) {throw new BaseException(['msg' => '请先到后台小程序设置填写微信支付证书文件']);}// cert目录$filePath = dirname(__DIR__) . '/library/wechat/cert/' . $this->wxapp['wxapp_id'] . '/';return ['certPem' => $filePath . 'cert.pem','keyPem' => $filePath . 'key.pem'];}
}

最新PHP对接微信支付,发起商家转账API,商家转账到零钱

上面类文件可直接使用,根据自己需求改动即可,下方是微信支付官方的接口文档

发起商家转账API

最新PHP对接微信支付,发起商家转账API,商家转账到零钱相关推荐

  1. 对接微信支付之网页支付详解

    对接微信支付之网页支付详解 声明:转载请注明出处 阅读对象:本文针对的是网页中的扫码支付 温馨提示:微信支付坑比较多,阅读时请仔细一些,不要放过所有需要注意的内容 , 本人一路踩坑过来,希望大家引以为 ...

  2. 简易支付平台(已对接微信支付)

    序 最近H5开发的app需要对接微信支付,我想的是公司貌似开没有支付平台,听说了另一个项目也要对接支付.为了宇宙的和平,我想就提出来单做,所以说干就干,不考虑那么多,只要自己认可自己就行. 一.支付平 ...

  3. Java对接微信支付(完整全流程)

    Java对接微信支付及支付回调通知的全流程 一.所用框架.对接微信支付我们技术组用的是payment框架,因为该框架已整合springboot因此很方便快捷 <dependency>< ...

  4. app对接微信支付例子

    好的,我会尽力用中文为您回答这个问题. 首先,在开发 app 对接微信支付之前,您需要先在微信商户平台注册账号,然后通过认证和审核后获得微信支付的相关权限.在获得权限后,您就可以在 app 中集成微信 ...

  5. java对接微信支付收不到支付通知问题(亲身实践)

    问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...

  6. node 对接微信支付的踩坑记录(服务端)

    因项目需要,对接了微信支付,微信支付对于网页来说没有什么工作量,申请了商户号后,直接将收款码放到网页上就可以,但是小程序需要调起微信支付直接付款,于是认真翻阅了官网要针对小程序做微信支付的对接. 准备 ...

  7. springboot 微信小程序 对接微信支付功能(完整版)

    微信小程序对接微信支付功能 业务流程时序图 JAVA版 1. 项目架构 2. pom.xml配置文件 3. 小程序账号参数配置类 4.JAVA 通用代码 4.1 工具类 4.1.1 IdGen (id ...

  8. java支付接口开发原理_java对接微信支付接口开发的过程是什么?

    java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...

  9. java对接微信支付:JSAPI支付(微信公众号支付)

    本文是[微信JSAPI支付]文章,主要讲解商户对接微信支付,简洁版测试 文章目录 一.JSAPI支付接入前准备 二.代码片段 1.引入Maven依赖 2.后端业务请求接口 3.前端调起支付请求方法 总 ...

  10. PHP微信支付 curl请求https://api.mch.weixin.qq.com/pay/unifiedorder 返回空的解决方案

    PHP微信支付 curl请求https://api.mch.weixin.qq.com/pay/unifiedorder 返回空的解决方案 这个问题是我在生成微信支付二维码的时候碰到的,起初代码都是正 ...

最新文章

  1. 其他算法-LSH局部敏感度哈希
  2. PNAS前沿:迈向作为多层学习的进化理论
  3. python数组改变维数
  4. php聊天功能_php实现简单聊天功能
  5. java创建目录时带权限_java – 无法在外部存储中创建目录,尽管权限显然设置正确...
  6. java 面试题解惑一 类的初始化顺序
  7. Java 并发编程之同步工具类闭锁 CountDownLatch
  8. Oracle分析函数简析
  9. 谷粒商城:10.商品服务 — 属性分组
  10. 神秘的程序员——编程的乐趣
  11. AngularJS-模块化
  12. 宠物游戏系统 java
  13. 计算机科学与应用论文,计算机科学与应用论文
  14. matlab ignoreanalyticconstraints,MATLAB函数随笔之计算篇
  15. Incorrect string value: '\xF0\x9F\x91\x80' for column数据库中添加表情报错
  16. 短视频SDK技术选型
  17. C语言求矩阵的逆(高斯法)
  18. 深度学习及并行化实现概述
  19. 监控利器之使用JConsole轻松监控JVM运行情况
  20. show函数的作用是什么python_matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)...

热门文章

  1. 一篇通读网贷产品的身份核验设计
  2. codelite编译器配置
  3. 【免费培训】腾讯WeTestTesterHome WorkShop | 一起学压测
  4. 实现旋转六面体(含动画的基本介绍)
  5. 【顺序栈】32 顺序栈ADT模板简单应用算法设计:火车调度
  6. wireshark-filter帮助手册
  7. js鼠标点击位置 弹出层由中心向四周缓慢扩大
  8. NLP自然语言处理系列-音乐推荐系统实战 -计算相似度得到推荐结果
  9. 银行的SWIFT CODE 和 IBAN CODE 和 ABA CODE 分别是什么意思
  10. halcon 20.11.02 深度学习语义分割例程报错