【源码家】

PHP实现微信商户支付企业付款到零钱功能 教程

  • 时间:2018-11-27 10:46 编辑:王大磊 来源:www.yuanmajia.com 阅读:5088
  • 扫一扫,手机访问
摘要:PHP实现微信商户支付企业付款到零钱功能 教程

一、开通条件

企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。

使用条件

  • 商户号(或同主体其他非服务商商户号)已入驻90日

  • 商户号(或同主体其他非服务商商户号)有30天连续正常交易

  • 登录微信支付商户平台-产品中心,开通企业付款。

具体的可以看微信支付开发文档

二、代码展示

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
//企业付款到微信零钱,PHP接口调用方法
define("APPID", "wxe062425f740c30d8"); // 商户账号appid
define("MCHID", "10000098");  // 商户号
define("SECRECT_KEY", "453436425252"); //支付密钥签名
define("IP", "xxx.xxx.xx.xx"); //IP
  
  
 /**
 * [xmltoarray xml格式转换为数组]
 * @param [type] $xml [xml]
 * @return [type]  [xml 转化为array]
 */
 function xmltoarray($xml) { 
  //禁止引用外部xml实体 
  libxml_disable_entity_loader(true); 
  $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
  $val = json_decode(json_encode($xmlstring),true); 
  return $val;
 }
  
 /**
 * [arraytoxml 将数组转换成xml格式(简单方法):]
 * @param [type] $data [数组]
 * @return [type]  [array 转 xml]
 */
 function arraytoxml($data){
  $str='<xml>';
  foreach($data as $k=>$v) {
   $str.='<'.$k.'>'.$v.'</'.$k.'>';
  }
  $str.='</xml>';
  return $str;
 }
  
 /**
 * [createNoncestr 生成随机字符串]
 * @param integer $length [长度]
 * @return [type]   [字母大小写加数字]
 */
 function createNoncestr($length =32){
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"
  $str ="";
  
  for($i=0;$i<$length;$i++){ 
   $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); 
  
  return $str;
 }
  
 /**
 * [curl_post_ssl 发送curl_post数据]
 * @param [type] $url  [发送地址]
 * @param [type] $xmldata [发送文件格式]
 * @param [type] $second [设置执行最长秒数]
 * @param [type] $aHeader [设置头部]
 * @return [type]   [description]
 */
 function curl_post_ssl($url, $xmldata, $second = 30, $aHeader = array()){
  $isdir = $_SERVER['DOCUMENT_ROOT']."/cert/";//证书位置;绝对路径
  
  $ch = curl_init();//初始化curl
  
  curl_setopt($ch, CURLOPT_TIMEOUT, $second);//设置执行最长秒数
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//
  curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型
  curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置
  curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型
  curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置
  curl_setopt($ch, CURLOPT_CAINFO, 'PEM');
  curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem');
  if (count($aHeader) >= 1) {
   curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部
  }
  curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);//全部数据使用HTTP协议中的"POST"操作来发送
  
  $data = curl_exec($ch);//执行回话
  if ($data) {
   curl_close($ch);
   return $data;
  } else {
   $error = curl_errno($ch);
   echo "call faild, errorCode:$error\n";
   curl_close($ch);
   return false;
  }
 }
  
  
 /**
 * [sendMoney 企业付款到零钱]
 * @param [type] $amount  [发送的金额(分)目前发送金额不能少于1元]
 * @param [type] $re_openid [发送人的 openid]
 * @param string $desc  [企业付款描述信息 (必填)]
 * @param string $check_name [收款用户姓名 (选填)]
 * @return [type]    [description]
 */
 function sendMoney($amount,$re_openid,$desc='测试',$check_name=''){
    
  $total_amount = (100) * $amount;
    
  $data=array(
   'mch_appid'=>APPID,//商户账号appid
   'mchid'=> MCHID,//商户号
   'nonce_str'=>createNoncestr(),//随机字符串
   'partner_trade_no'=> date('YmdHis').rand(1000, 9999),//商户订单号
   'openid'=> $re_openid,//用户openid
   'check_name'=>'NO_CHECK',//校验用户姓名选项,
   're_user_name'=> $check_name,//收款用户姓名
   'amount'=>$total_amount,//金额
   'desc'=> $desc,//企业付款描述信息
   'spbill_create_ip'=> IP,//Ip地址
  );
  
  //生成签名算法
  $secrect_key=SECRECT_KEY;///这个就是个API密码。MD5 32位。
  $data=array_filter($data);
  ksort($data);
  $str='';
  foreach($data as $k=>$v) {
   $str.=$k.'='.$v.'&';
  }
  $str.='key='.$secrect_key;
  $data['sign']=md5($str);
  //生成签名算法
  
  
  $xml=arraytoxml($data);
   
  $res=curl_post_ssl($url,$xml);
  $return=xmltoarray($res);
    
   
  print_r($return);
  //返回来的结果是xml,最后转换成数组
 /*
 array(9) {
  ["return_code"]=>
  string(7) "SUCCESS"
  ["return_msg"]=>
  array(0) {
  }
  ["mch_appid"]=>
  string(18) "wx57676786465544b2a5"
  ["mchid"]=>
  string(10) "143345612"
  ["nonce_str"]=>
  string(32) "iw6TtHdOySMAfS81qcnqXojwUMn8l8mY"
  ["result_code"]=>
  string(7) "SUCCESS"
  ["partner_trade_no"]=>
  string(18) "201807011410504098"
  ["payment_no"]=>
  string(28) "1000018301201807019357038738"
  ["payment_time"]=>
  string(19) "2018-07-01 14:56:35"
 }
 */
  
    
  $responseObj = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
  echo $res= $responseObj->return_code; //SUCCESS 如果返回来SUCCESS,则发生成功,处理自己的逻辑
    
  return $res;
 }

三、调用方法

?

1
sendMoney(1,'gdgfdg56456223423','xxxx测试','xxx');

调用的话,稍微在修改下,加上自己的业务逻辑就行了。

四、调用效果


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【网站运营|】市场最流行哪种直播app开发的方式?源码二次开发更省时省力(2020-04-23 14:22)
【数据库|】在君雅上海被骗了如何挽回呢?君雅上海亏损能挽回吗?君雅上海是真的吗?(2020-04-18 11:32)
【网站运营|】百达宝投资骗局内幕爆出!你不是第一个受害者(2020-04-17 14:24)
【源码编程|】抢购-票源码出售或联合运营(2020-03-14 14:43)
【源码编程|】新圣平台出租,(2020-02-10 14:54)
【源码编程|】源码编程(2019-12-25 13:25)
【网站运营|建站经验】米拓企业建站系统V7.0.0正式发布,支持10合1建站(2019-12-16 16:40)
【网站运营|网络赚钱】个性化需求的时代,直播+短视频的融合让企业的呈现更加立体化(2019-12-09 11:07)
【网站运营|】企业搭建直播平台的实际作用有哪些(2019-12-06 09:58)
【网站运营|网络赚钱】蜂鸟欢聚棋牌联盟(2019-12-05 12:42)
网站首页 | 关于我们 | 广告合作 | 联系我们 | 隐私条款 | 免责声明 | 网站地图
CopyRight 2014-2024 【源码家】 | 豫ICP备17010181号
展开