php微信支付步骤(PHP实现微信提现企业付款到零钱)
类别:编程学习 浏览量:636
时间:2022-01-14 02:55:57 php微信支付步骤
PHP实现微信提现企业付款到零钱怎么开通企业付款到零钱?
有的商户号的产品中心是没有这个功能的,不过,该功能的pid(product id)是5,只要随便进去某一个产品,在地址栏把pid改为5。
即可进入该功能页面,进行开通,不过要满足条件。
用户提现代码:
|
//用户微信提现 private function withdrawals_weixin( $id ){ $falg = M( 'withdrawals' )->where([ 'id' => $id ])->find(); $openid = M( 'users' )->where( 'user_id' , $falg [ 'user_id' ])->value( 'openid' ); $data [ 'openid' ] = $openid ; $data [ 'pay_code' ] = $falg [ 'id' ]. $falg [ 'user_id' ]; $data [ 'desc' ] = '提现ID' . $falg [ 'id' ]; if ( $falg [ 'taxfee' ] >= $falg [ 'money' ]){ return array ( 'status' =>1, 'msg' => "提现额度必须大于手续费!" ); } else { $data [ 'money' ] = bcsub( $falg [ 'money' ], $falg [ 'taxfee' ], 2); } include_once PLUGIN_PATH . "payment/weixin/weixin.class.php" ; $weixin_obj = new \weixin(); $result = $weixin_obj ->transfer( $data ); return $result ; } |
其中pay_code在商户号的提现功能是唯一的,所以为了防重放攻击,这个值千万不能用随机数,最好用ID,具有提现记录唯一。
提现逻辑代码:
|
// 微信提现转账 function transfer( $data ){ header( "Content-type: text/html; charset=utf-8" ); //CA证书及支付信息 $wxchat [ 'appid' ] = WxPayConfig:: $appid ; $wxchat [ 'mchid' ] = WxPayConfig:: $mchid ; $wxchat [ 'api_cert' ] = PLUGIN_PATH. '/payment/weixin/cert/apiclient_cert.pem' ; $wxchat [ 'api_key' ] = PLUGIN_PATH. '/payment/weixin/cert/apiclient_key.pem' ; // $wxchat['api_ca'] = '/plugins/payment/weixin/cert/rootca.pem'; $webdata = array ( 'mch_appid' => $wxchat [ 'appid' ], 'mchid' => $wxchat [ 'mchid' ], 'nonce_str' => md5(time()), //'device_info' => '1000', 'partner_trade_no' => $data [ 'pay_code' ], //商户订单号,需要唯一 'openid' => $data [ 'openid' ], //转账用户的openid 'check_name' => 'NO_CHECK' , //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK: //'re_user_name' => 'jorsh', //收款人用户姓名 'amount' => $data [ 'money' ] * 100, //付款金额单位为分 'desc' => $data [ 'desc' ], 'spbill_create_ip' => request()->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 ->array2xml( $webdata ); $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers' ; $res = $this ->http_post( $pay_url , $wget , $wxchat ); 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 ; } |
其中 PLUGIN_PATH 是一个常量
|
define( 'PLUGIN_PATH' , __DIR__ . '/plugins/' ); |
定义插件目录
|
/** * 将一个数组转换为 XML 结构的字符串 * @param array $arr 要转换的数组 * @param int $level 节点层级, 1 为 Root. * @return string XML 结构的字符串 */ function array2xml( $arr , $level = 1) { $s = $level == 1 ? "<xml>" : '' ; foreach ( $arr as $tagname => $value ) { if ( is_numeric ( $tagname )) { $tagname = $value [ 'TagName' ]; unset( $value [ 'TagName' ]); } if (! is_array ( $value )) { $s .= "<{$tagname}>" .(! is_numeric ( $value ) ? '<![CDATA[' : '' ). $value .(! is_numeric ( $value ) ? ']]>' : '' ). "</{$tagname}>" ; } else { $s .= "<{$tagname}>" . $this ->array2xml( $value , $level + 1). "</{$tagname}>" ; } } $s = preg_replace( "/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/" , ' ' , $s ); return $level == 1 ? $s . "</xml>" : $s ; } function http_post( $url , $param , $wxchat ) { $oCurl = curl_init(); if ( stripos ( $url , "https://" ) !== FALSE) { curl_setopt( $oCurl , CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt( $oCurl , CURLOPT_SSL_VERIFYHOST, FALSE); } if ( is_string ( $param )) { $strPOST = $param ; } else { $aPOST = array (); foreach ( $param as $key => $val ) { $aPOST [] = $key . "=" . urlencode( $val ); } $strPOST = join( "&" , $aPOST ); } curl_setopt( $oCurl , CURLOPT_URL, $url ); curl_setopt( $oCurl , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $oCurl , CURLOPT_POST, true); curl_setopt( $oCurl , CURLOPT_POSTFIELDS, $strPOST ); if ( $wxchat ){ curl_setopt( $oCurl ,CURLOPT_SSLCERT, $wxchat [ 'api_cert' ]); curl_setopt( $oCurl ,CURLOPT_SSLKEY, $wxchat [ 'api_key' ]); curl_setopt( $oCurl ,CURLOPT_CAINFO, $wxchat [ 'api_ca' ]); } $sContent = curl_exec( $oCurl ); $aStatus = curl_getinfo( $oCurl ); curl_close( $oCurl ); if ( intval ( $aStatus [ "http_code" ]) == 200) { return $sContent ; } else { return false; } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/qq_36602939/article/details/91399977
您可能感兴趣
- php目录函数创建教程(PHP下载文件函数与用法示例)
- php开发中用什么模板(PHP模版引擎原理、定义与用法实例)
- php检查语法(使用 PHP Masked Package 屏蔽敏感数据的实现方法)
- php7 入门(php7新特性的理解和比较总结)
- php添加数据到mysql数据库(PHP通过代码连接XAMPP数据库及MySQL数据库方法)
- php中row函数(PHP中number_format函数的用法讲解)
- php八大模式详解(php设计模式之工厂模式用法经典实例分析)
- php怎样创建新文件详情(php文件后缀不强制为.php的实操方法)
- php环境搭建windows系统(Windows环境下安装PHP Pear的方法图文教程)
- wordpress的静态php页面在哪(如何让PHPnow支持wordpress静态化链接的方法)
- php命名对照表(PHP命名空间用法实例分析)
- php开发的主要技术(详解PHP神奇又有用的Trait)
- php cgi是什么意思(PHP7内核CGI与FastCGI详解)
- web项目部署到阿里云服务器上(阿里云的WindowsServer2016上部署php+apache)
- phpstudy搭建网站全过程(phpstudy在本地搭建多个网站的方法)
- dedecms手机独立域名(DedeCMS Wap.php 绑定域名的解决办法)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
热门推荐
- idea docker使用(最新IDEA快速实现Docker镜像部署运行的过程详解)
- python复杂的验证码处理(Python 通过打码平台实现验证码的实现)
- sql常遇到的问题(SQL语句执行超时引发网站首页访问故障问题)
- python中如何限制数字的个数(python 处理数字,把大于上限的数字置零实现方法)
- css padding简写
- 云服务器最低配置可以吗(云服务器内存怎么选择?)
- 怎么把csv文件导入mysql(mysql导入csv的4种报错的解决方法)
- MVC Model验证
- 服务器怎么用虚拟内存(windows云服务器提示虚拟内存不足的解决方案)
- dede数据统计(DEDE [field:global name=autoindex/] 按序号排列从0从1开始)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9