怎么開通企業(yè)付款到零錢?
有的商戶號(hào)的產(chǎn)品中心是沒有這個(gè)功能的,不過,該功能的pid(product id)是5,只要隨便進(jìn)去某一個(gè)產(chǎn)品,在地址欄把pid改為5。
即可進(jìn)入該功能頁面,進(jìn)行開通,不過要滿足條件。
用戶提現(xiàn)代碼:
//用戶微信提現(xiàn)
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'] = '提現(xiàn)ID'.$falg['id'];
if($falg['taxfee'] >= $falg['money']){
return array('status'=>1, 'msg'=>"提現(xiàn)額度必須大于手續(xù)費(fèi)!" );
}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在商戶號(hào)的提現(xiàn)功能是唯一的,所以為了防重放攻擊,這個(gè)值千萬不能用隨機(jī)數(shù),最好用ID,具有提現(xiàn)記錄唯一。
提現(xiàn)邏輯代碼:
// 微信提現(xiàn)轉(zhuǎn)賬
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'], //商戶訂單號(hào),需要唯一
'openid' => $data['openid'],//轉(zhuǎn)賬用戶的openid
'check_name'=> 'NO_CHECK', //OPTION_CHECK不強(qiáng)制校驗(yàn)真實(shí)姓名, FORCE_CHECK:強(qiáng)制 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 是一個(gè)常量
define('PLUGIN_PATH', __DIR__ . '/plugins/');
定義插件目錄
/**
* 將一個(gè)數(shù)組轉(zhuǎn)換為 XML 結(jié)構(gòu)的字符串
* @param array $arr 要轉(zhuǎn)換的數(shù)組
* @param int $level 節(jié)點(diǎn)層級(jí), 1 為 Root.
* @return string XML 結(jié)構(gòu)的字符串
*/
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;
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- PHP APP微信提現(xiàn)接口代碼
- PHP實(shí)現(xiàn)微信提現(xiàn)功能