Wechat Pay에 대해 말하면, 나는 모든 사람들이 그것에 익숙하다고 생각하지만,이 프로그램을 완료하고 싶을 때 프로그래머는 어떻게 작성하고 설정해야합니까? 걱정하지 마십시오. 오늘 새로운 기술 채널의 편집자가 예를 들었습니다. 자세한 내용을 알아 보려면 다음 기사로 가자!
소개 : 유통 업체, WeChat 사업에서 현금을 인출하는 방법?
WeChat과 직접 지불하십시오.
구현은 다음과 같습니다.
WeChat 결제 구성
/*wechat 결제*/'pay_weixin'=> array ( 'appid'=> 'xxxx', 'appsecret'=> 'xxxxxx,'mchid '=>'1283301801 ', // merchant number'key '=>'zhudianbaodianzhudianbaoo0527 ', // merchant'ky 'apiclient _ciclienge'key 'ky'key 'key'key 'conf/cert/apiclient_cert.pem', // 판매자 인증서 apiclient_cert.pem 'apiclient_key'=> 'conf/cert/apiclient_key.pem', // 판매자 인증서 apiclient_key.pem)
Arraytoxml
/*** xml*/function arraytoxml ($ arr) {$ xml = "<xml>"; foreach ($ ar as $ key => $ val) {if (is_numeric ($ val)) {$ xml. = "<". $ key. ">". $ val. "</". $ key. ";"; } else $ xml. = "<". $ key. "> <! [cdata [". $ val. "]> </". $ key. ">"; } $ xml. = "</xml>"; return $ xml;}인증서를 사용하여 게시물의 해당 인터페이스 URL에 XML을 제출하십시오.
/*** 함수 : 인증서를 사용하여 해당 인터페이스 URL*/function postxmlsslcurl ($ xml, $ url, $ second, $ cert, $ key) {$ ch = curl_init (); // 시간 초과 시간 curl_setopt ($ ch, curlopt_timeout, $ second? $ secon : $ this-> timeout); // 하나가있는 경우 여기에 프록시를 설정하십시오 (// 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); // 헤더 curl_setopt를 설정합니다 ($ ch, curlopt_header, false); // 결과를 문자열로 설정하고 화면 curl_setopt ($ ch, curlopt_returntransfer, true)로 출력합니다. // 인증서 설정 // 인증서 사용 : cert and key 각각 두 개의 .pem 파일에 속합니다. // 기본 형식은 pem이므로 curl_setopt ($ ch, curlopt_sslcerttype, 'pem')를 주석을 달 수 있습니다. curl_setopt ($ ch, curlopt_sslcert, $ cret); // 기본 형식은 PEM이며 Curl_SetOpt ($ ch, curlopt_sslkeytype, 'pem')를 주석에 올릴 수 있습니다. curl_setopt ($ ch, curlopt_sslkey, $ key); // 게시물 제출 방법 Curl_SetOpt ($ ch, curlopt_post, true); curl_setopt ($ ch, curlopt_postfields, $ xml); $ data = curl_exec ($ ch); // return result if ($ data) {curl_close ($ ch); $ this-> xmltoarray ($ data); } else {$ error = curl_errno ($ ch); echo "컬러 오류, 오류 코드 : $ 오류". "<br>"; curl_close ($ ch); 거짓을 반환합니다. }}기업은 개인에게 지불합니다
// 엔터프라이즈는 개별 공개 기능 paytouser ($ params, $ key, $ apcent_cert, $ apiclient_key) {$ url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; // 감지 필요한 매개 변수 if ($ params [ "partner_trade_no"] == null) {// exit ( "응용 프로그램 인터페이스, 필요한 매개 변수 partner_trade_no!". "<br>"); } elseif ($ params [ "OpenID"] == NULL) {EXIT ( "응용 프로그램 인터페이스, 필요한 매개 변수 OpenID!". "<br>"); } elseif ($ params [ "check_name"] == null) {// no_check : 실제 이름 확인 force _check : 실제 이름이없는 사용자는 검증하지 못하고 전송이 전송 될 수 없습니다) 옵션 옵션 : 진실한 이름이 확인 된 사용자만이 전송을 성공적으로 확인하지 않은 사용자만이 전송할 수 없음 인터페이스, 필요한 매개 변수 check_name이 누락되었습니다! "."<br> "); } elseif (($ params [ "check_name"] == 'force_check'또는 $ params [ "check_name"] == 'Option_check') && ($ params [ "re_user_name"] == null) {// 지불 사용자의 실제 이름. EXIT ( "응용 프로그램 인터페이스, 필요한 매개 변수 re_user_name이 누락되었습니다!". "<br>"); } elseif ($ params [ "금액"] == NULL) {EXIT ( "응용 프로그램 인터페이스, 필요한 매개 변수 금액이 누락되었습니다!". "<br>"); } elseif ($ params [ "desc"] == null) {exit ( "응용 프로그램 인터페이스, 필요한 매개 변수 desc!". "<br>"); } $ params [ "MCH_APPID"] = $ this-> appid; // public 계정 ID $ params [ "MCHID"] = $ this-> mCHID; // 판매자 번호 $ params [ "nonce_str"] = $ this-> createNoncErst (); // random $ params [ 'spbill_create_ip'] = $ _server [ '')? '192.127.1.1': $ _server [ 'remote_addr']; // ip $ params get $ params [ "sign"] = $ this-> getSign ($ params, $ key); // 서명 $ xml = $ this-> arraytoxml ($ params); return $ this-> postxmlsslcurl ($ xml, $ url, false, $ apcent_cert, $ apiclient_key);}비즈니스 지불
개인 함수 _enterPrisePay ($ 번호, $ member_id, $ mold, $ desc) {// get openID $ wxuser_id = m ( 'member')-> where (array ( 'id'=> $ member_id))-> getfield ( 'wxuser_id'); $ OpenID = M ( 'WXUSER')-> 여기서 (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', 'mond'=> $ mold, // total 'desc'=> $ desc,); $ result = $ Enterprise-> PayTouser ($ params, $ pay [ 'key'], $ pay [ 'apiclient_cert'], $ pay [ 'apiclient_key']); 반환 $ 결과;}프로세스 유통 업체 인출
개인 기능 _handle ($ trueName, $ price) {// 배급 업체 핸들 INMPLESTAL $ 퇴행소 = date ( "ymdhis"). Strval (Rand (1000, 9999)); $ data = array ( 'reployId'=> $ replisid, 'store_id'=> $ this-> store_id, 'member_id'=> $ this-> member_id, 'truename'=> $ truename, 'price'=> $ price, 'addtime'=> time ()); // ($ price> = c ( 'reploth_uncheck_value')) {$ data [ 'need_check'] = 0; $ data [ 'status'] = 1; if ($ this-> reployModel-> add ($ data)) {$ result = $ this-> _ EnterprisePay ($ rectriid, $ this-> member_id, $ price * 100, '배포 ('. $ truename. ') encth'); // 결제 정보의 오류 후 ($ result [ 'return_code']! = 'success') {$ this-> reployModel-> where (array ( 'reployid'=> $ replisid))-> save (array ( 'need_check'=> 1, 'status'=> 0)) 인 경우 검토해야합니다. $ this-> 할당 ( '성공', 2); } else {// wechat 트랜잭션 번호 $ set this-> reployModel-> where (array ( 'reployId'=> $ remberd))-> save (array ( 'payment_no'=> $ result [ 'payment_no'])); // 커미션 흐름, 고정 된 $ data = array ( 'store_id'=> $ this-> store_id, 'user_type'=> 2, 'user_id'=> $ this-> shop_id, 'trade_type'=> 2, 'trade_no'=> $ replothid, 'price'=>-$ price, 'status'=> 1, '메시지'=> $ truename. => time ()); m ( 'twitter_log')-> add ($ data); // 해당 커미션을 줄이기 M ( 'member')-> where (배열 ( 'id'=> $ this-> member_id))-> setinc ( 'money',-$ price); $ this-> 할당 ( '성공', 1); // 커미션 변경 메시지 보내기 import ( '@. action.tmplmsg'); $ tmplmsg = new tmplmsg (); $ tmplmsg-> send (tmplmsg :: price_change, $ this-> member_id, 배열 ( 'token'=> $ this-> token, 'intro'=> '배포위원회 철수 전송', 'price'=> $ price, 'business'=> business); }} else {$ this-> 오류 ( '현금 인출 정보 오류!'); }} // 검토가 필요합니다. else {$ this-> reployModel-> add ($ data); $ this-> 할당 ( '성공', 2); }}기업의 기능을 사용자에게 지불하거나, 기업이 API 인터페이스를 통해 지불하도록 지원하거나, WeChat 결제 판매자 플랫폼 웹 기능을 통해 지불을 운영합니다.
친절한 팁 :
◆ 동일한 실제 사용자에게 지불하면 단일 거래의 일일 한도는 2W/2W입니다.
◆ 단일 거래와 단일 일일 한도가 2000/2000으로 동일한 비 현실 사용자에게 지불
◆ 같은 날 판매자의 총 지불 한도는 100W입니다.
◆ 가맹점 번호에 묶인 Appid 만 지원됩니다.
◆ 대상 지불 사용자의 경우 WeChat Pay로 인증 된 사용자는 실명을 확인하는 기능을 제공 할 수 있습니다. 실제 이름으로 인증되지 않은 사용자는 확인할 수 없습니다. 기업은 자체 비즈니스의 보안 수준에 따라 검증 유형을 선택할 수 있습니다.
◆ 지불 금액은 판매자가 현재 이용할 수있는 금액보다 작거나 동일해야합니다.
◆ 유료 기록의 경우 기업은 기업 지불 쿼리를 통해 해당 데이터를 볼 수 있습니다.
도착
결제 자금은 대상 사용자의 변경 (WeChat-I-Wallet-Change)에 입력됩니다. WeChat Pay는 계정의 변경 사항을 알리고 변경 수입 및 지출 세부 정보가 표시됩니다.
친절한 팁 :
Change 계정의 히스토리 클라이언트 버전의 경우 자금은 사용자의 레드 엔벨로프 계정에 입력되며 WeChat Pay는 메시지없이 사용자에게 알리고 기업은 사용자에게 직접 연락하도록 선택할 수 있습니다.
인터페이스 링크 : https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
필요한 인증서입니다
요청에는 양방향 인증서가 필요합니다.
Data example:
<xml> <mch_appid> wxe062425f740c30d8 </mch_appid> <mchid> 10000098 </mchid> <nonce_str> 3pg2j4iltkch16cq2502si8znmt m67vs </nonce_str> <partner_trade_no> 1000000982014120919616 </partner_trade_no> <oselid> oho4gt7wvpxit1a9gjfamymiz y1s </openid> <checl_name> 옵션_check </check_name> <re_user_name> Zhang San </re_user_name> <mold> 100 </bommer> <sc> 행복 휴일! </desc> <spbill_create_ip> 10.2.3.10 </spbill_create_ip> <sign> c97bdbacf3762775366f38b629f45e3 </sign> </xml>
Successful example:
<xml> <return_code> <! [cdata [success]]> </return_code> <return_msg> <! bd989]]> </mch_appid> <mchid> <! jpcxzxlx0q]]> </nonce_str> <result_code> <! [cdata [success]> </result_code> <partner_trade_no> <! [cdata [100135742015051915265824 41]]> </</</payment_no> <! 15:26:59]]> </payment_time> </xml>
Error example:
<xml> <return_code> <! [cdata [fail]]> </return_code> <return_msg> <! [cdata [시스템이 바쁘다. 다시 시도하십시오 나중에]> </return_msg> <result_code> <!
PHP 관련 컨텐츠에 대한 자세한 내용은이 사이트의 주제를 확인하십시오. "PHP WeChat 개발 기술 요약", "PHP 인코딩 및 트랜스 코딩 작업의 요약", "PHP 네트워크 프로그래밍 기술 요약", "PHP 기본 구문 자습서 소개", "PHP 문자열 습격 소개", "PHP Database Operation Operation의 소개"및 "Commond Database Operation"및 "Commond Commond Common. 기술 "
이 기사에 설명 된 PHP에서 WeChat Enterprise 계정 지불을 구현하는 방법에 대한 자세한 설명이 모든 사람이 PHP 프로그래밍을 배우는 데 도움이되기를 바랍니다. 모두가 잘못된 새로운 기술 채널을 계속 지원하기를 바랍니다!