本文實(shí)例講述了php實(shí)現(xiàn)微信企業(yè)號(hào)支付個(gè)人的方法。分享給大家供大家參考,具體如下:
導(dǎo)語(yǔ):分銷商,微商提現(xiàn)怎么提?
直接用微信支付。
實(shí)現(xiàn)如下:
微信支付配置
/*微信支付*/ PAY_WEIXIN = array( appid = XXXX , appsecret = XXXXXXX , mchid = 1283301801 , //商戶號(hào) key = zhudianbaodiandodozhudianbao0527 , //商戶支付秘鑰 apiclient_cert = Conf/cert/apiclient_cert.pem , //商戶證書apiclient_cert.pem apiclient_key = Conf/cert/apiclient_key.pem , //商戶證書apiclient_key.pem )
arrayToXml
/*** array轉(zhuǎn)xmlfunction arrayToXml($arr) $xml = xml foreach ($arr as $key= $val) if (is_numeric($val)) $xml.= .$key. .$val. / .$key. else $xml.= .$key. ![CDATA[ .$val. ]] / .$key. $xml.= /xml return $xml;}
使用證書,以post方式提交xml到對(duì)應(yīng)的接口url
/*** 作用:使用證書,以post方式提交xml到對(duì)應(yīng)的接口urlfunction postXmlSSLCurl($xml, $url, $second, $cert, $key) $ch = curl_init(); //超時(shí)時(shí)間 curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this- timeout); //這里設(shè)置代理,如果有的話 //curl_setopt($ch,CURLOPT_PROXY, 8.8.8.8 //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); //設(shè)置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //設(shè)置證書 //使用證書:cert 與 key 分別屬于兩個(gè).pem文件 //默認(rèn)格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE, PEM curl_setopt($ch,CURLOPT_SSLCERT,$cert); //默認(rèn)格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE, PEM curl_setopt($ch,CURLOPT_SSLKEY, $key); //post提交方式 curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); //返回結(jié)果 if($data){ curl_close($ch); return $this- xmlToArray($data); else { $error = curl_errno($ch); echo curl出錯(cuò),錯(cuò)誤碼:$error . br curl_close($ch); return false;}
企業(yè)向個(gè)人付款
//企業(yè)向個(gè)人付款html' target='_blank'>public function payToUser($params, $key, $apicent_cert, $apiclient_key) { $url = https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers //檢測(cè)必填參數(shù) if($params[ partner_trade_no ] == null) { // exit( 退款申請(qǐng)接口中,缺少必填參數(shù)partner_trade_no! . br }elseif($params[ openid ] == null){ exit( 退款申請(qǐng)接口中,缺少必填參數(shù)openid! . br }elseif($params[ check_name ] == null){ //NO_CHECK:不校驗(yàn)真實(shí)姓名 FORCE_CHECK:強(qiáng)校驗(yàn)真實(shí)姓名(未實(shí)名認(rèn)證的用戶會(huì)校驗(yàn)失敗,無(wú)法轉(zhuǎn)賬)OPTION_CHECK:針對(duì)已實(shí)名認(rèn)證的用戶才校驗(yàn)真實(shí)姓名(未實(shí)名認(rèn)證用戶不校驗(yàn),可以轉(zhuǎn)賬成功) exit( 退款申請(qǐng)接口中,缺少必填參數(shù)check_name! . br }elseif(($params[ check_name ] == FORCE_CHECK or $params[ check_name ] == OPTION_CHECK ) ($params[ re_user_name ] == null)){ //收款用戶真實(shí)姓名。 exit( 退款申請(qǐng)接口中,缺少必填參數(shù)re_user_name! . br }elseif($params[ amount ] == null){ exit( 退款申請(qǐng)接口中,缺少必填參數(shù)amount! . br }elseif($params[ desc ] == null){ exit( 退款申請(qǐng)接口中,缺少必填參數(shù)desc! . br $params[ mch_appid ] = $this- appid;//公眾賬號(hào)ID $params[ mchid ] = $this- mchid;//商戶號(hào) $params[ nonce_str ] = $this- createNoncestr();//隨機(jī)字符串 $params[ spbill_create_ip ] = $_SERVER[ REMOTE_ADDR ] == ::1 ? 192.127.1.1 : $_SERVER[ REMOTE_ADDR //獲取IP $params[ sign ] = $this- getSign($params, $key);//簽名 $xml = $this- arrayToXml($params); return $this- postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);}
企業(yè)付款
private function _enterprisePay($number, $member_id, $amount, $desc) // 獲取openid $wxuser_id = M( Member )- where(array( id = $member_id))- getField( wxuser_id $openid = M( Wxuser )- where(array( id = $wxuser_id))- getField( openid $pay = C( PAY_WEIXIN import( @.Action.WxDevelop $enterprise = new WxEnterprise($pay[ appid ], $pay[ appsecret ], $pay[ mchid $params = array( partner_trade_no = $number, openid = $openid, check_name = NO_CHECK , amount = $amount, // 總計(jì) desc = $desc, $result = $enterprise- payToUser($params, $pay[ key ], $pay[ apiclient_cert ], $pay[ apiclient_key return $result;}
處理分銷商提現(xiàn)
private function _handle($truename, $price) { // 處理分銷商提現(xiàn) $withdrawid = date( ymdHis ) . strval(rand(1000, 9999)); $data = array( withdrawid = $withdrawid, store_id = $this- store_id, member_id = $this- member_id, truename = $truename, price = $price, addtime = time()); //免審核 if ($price = C( withdraw_uncheck_value )) { $data[ need_check ] = 0; $data[ status ] = 1; if ($this- withdrawModel- add($data)) { $result = $this- _enterprisePay($withdrawid, $this- member_id, $price * 100, 分銷商( . $truename . )提現(xiàn) //遇到支付信息出錯(cuò),轉(zhuǎn)為需審核提現(xiàn) if ($result[ return_code ] != SUCCESS ) { $this- withdrawModel- where(array( withdrawid = $withdrawid))- save(array( need_check = 1, status = 0)); $this- assign( success , 2); else { //設(shè)置微信交易號(hào) $this- withdrawModel- where(array( withdrawid = $withdrawid))- save(array( payment_no = $result[ payment_no ])); //增加傭金流水,待修復(fù) $data = array( store_id = $this- store_id, user_type = 2, user_id = $this- shop_id, trade_type = 2, trade_no = $withdrawid, price = -$price, status = 1, message = $truename. 提現(xiàn) , addtime = time()); M( Twitter_log )- add($data); //減少相應(yīng)可提傭金 M( Member )- where(array( id = $this- member_id))- setInc( money , -$price); $this- assign( success , 1); //發(fā)送傭金變動(dòng)消息 import( @.Action.Tmplmsg $tmplmsg = new Tmplmsg(); $tmplmsg- send(Tmplmsg::PRICE_CHANGE, $this- member_id, array( token = $this- token, intro = 分銷傭金提現(xiàn)轉(zhuǎn)出 , price = $price, business = BUSINESS)); else { $this- error( 提現(xiàn)信息錯(cuò)誤! //需要審核 else { $this- withdrawModel- add($data); $this- assign( success , 2);}
提供企業(yè)向用戶付款的功能,支持企業(yè)通過(guò)API接口付款,或通過(guò)微信支付商戶平臺(tái)網(wǎng)頁(yè)功能操作付款。
溫馨提示:
◆ 給同一個(gè)實(shí)名用戶付款,單筆單日限額2W/2W
◆ 給同一個(gè)非實(shí)名用戶付款,單筆單日限額2000/2000
◆ 一個(gè)商戶同一日付款總額限額100W
◆ 僅支持商戶號(hào)已綁定的APPID;
◆ 針對(duì)付款的目標(biāo)用戶,已微信支付實(shí)名認(rèn)證的用戶可提供校驗(yàn)真實(shí)姓名的功能,未實(shí)名認(rèn)證的用戶無(wú)法校驗(yàn),企業(yè)可根據(jù)自身業(yè)務(wù)的安全級(jí)別選擇驗(yàn)證類型;
◆ 付款金額必須小于或等于商戶當(dāng)前可用余額的金額;
◆ 已付款的記錄,企業(yè)可通過(guò)企業(yè)付款查詢查看相應(yīng)數(shù)據(jù)。
到賬
付款資金將進(jìn)入目標(biāo)用戶的零錢(微信-我-錢包-零錢)。微信支付將做零錢入賬消息通知,零錢收支明細(xì)會(huì)展示相應(yīng)記錄。
溫馨提示:
針對(duì)無(wú)零錢賬戶的歷史客戶端版本,資金將進(jìn)入用戶的紅包賬戶,微信支付無(wú)消息通知用戶,企業(yè)可選擇自行觸達(dá)用戶。
接口鏈接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
是否需要證書
請(qǐng)求需要雙向證書。
數(shù)據(jù)示例:
xml mch_appid wxe062425f740c30d8 /mch_appid mchid 10000098 /mchid nonce_str 3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS /nonce_str partner_trade_no 100000982014120919616 /partner_trade_no openid ohO4Gt7wVPxIT1A9GjFaMYMiZY1s /openid check_name OPTION_CHECK /check_name re_user_name 張三 /re_user_name amount 100 /amount desc 節(jié)日快樂(lè)! /desc spbill_create_ip 10.2.3.10 /spbill_create_ip sign C97BDBACF37622775366F38B629F45E3 /sign /xml
成功示例:
xml return_code ![CDATA[SUCCESS]] /return_code return_msg ![CDATA[]] /return_msg mch_appid ![CDATA[wxec38b8ff840bd989]] /mch_appid mchid ![CDATA[10013274]] /mchid device_info ![CDATA[]] /device_info nonce_str ![CDATA[lxuDzMnRjpcXzxLx0q]] /nonce_str result_code ![CDATA[SUCCESS]] /result_code partner_trade_no ![CDATA[10013574201505191526582441]] /partner_trade_no payment_no ![CDATA[1000018301201505190181489473]] /payment_no payment_time ![CDATA[2015-05-19 15:26:59]] /payment_time /xml
錯(cuò)誤示例:
xml return_code ![CDATA[FAIL]] /return_code return_msg ![CDATA[系統(tǒng)繁忙,請(qǐng)稍后再試.]] /return_msg result_code ![CDATA[FAIL]] /result_code err_code ![CDATA[SYSTEMERROR]] /err_code err_code_des ![CDATA[系統(tǒng)繁忙,請(qǐng)稍后再試.]] /err_code_des /xml
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP !
相關(guān)推薦:
PHP實(shí)現(xiàn)微信公眾平臺(tái)企業(yè)號(hào)驗(yàn)證接口
如何使用PHP導(dǎo)出數(shù)據(jù)到淘寶助手CSV
以上就是php如何實(shí)現(xiàn)微信企業(yè)號(hào)支付個(gè)人的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選