怎么開通企業(yè)付款到零錢?
有的商戶號的產品中心是沒有這個功能的,不過,該功能的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' => "提現額度必須大于手續(xù)費!" ); } 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 節(jié)點層級, 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