怎么开通企业付款到零钱?
有的商户号的产品中心是没有这个功能的,不过,该功能的pid(product id)是5,只要随便进去某一个产品,在地址栏把pid改为5。
即可进入该功能页面,进行开通,不过要满足条件。
用户提现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//用户微信提现 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,具有提现记录唯一。
提现逻辑代码:
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
|
// 微信提现转账 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 是一个常量
1
|
define( 'PLUGIN_PATH' , __DIR__ . '/plugins/' ); |
定义插件目录
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
|
/** * 将一个数组转换为 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