Wechat Payといえば、誰もがそれに精通していると思いますが、このプログラムを完了したいときは、プログラマーはどのように書いてセットアップする必要がありますか?心配しないでください、今日、バグの新しいテクノロジーチャネルの編集者があなたに例をもたらしました。詳細については、次の記事に行きましょう!
はじめに:ディストリビューター、WeChatビジネスから現金を引き出す方法は?
WeChatで直接支払います。
実装は次のとおりです。
WeChat Payment Configuration
/*wechat paybed*/'pay_weixin' => array( 'appid' => 'xxxx'、 'appsecret' => 'xxxxxx、' mchid '=>' 1283301801 '、// merchant number' key '=>' zhudianbaodianbaudzhudianbaut 'apiclient' apiclient 'conf/cert/apiclient_cert.pem'、// merchant証明書apiclient_cert.pem 'apiclient_key' => 'conf/cert/apiclient_key.pem'、// merchant証明書apiclient_key.pem)
arraytoxml
/*** xmlへの配列*/function 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>"; $ xmlを返します;}証明書を使用して、XMLをポストの対応するインターフェイスURLに送信します
/***関数:証明書を使用して、対応するインターフェイスURLにXMLを送信します*/function postxmlsslcurl($ xml、$ url、$ second、$ cert、$ key){$ ch = curl_init(); // Timeout Time Curl_setopt($ ch、curlopt_timeout、$ second?$ second:$ this-> timeout); //ここにプロキシを設定します。 // 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)にcurl_setoptに設定します。 //証明書の設定curl_setopt($ ch、curlopt_sslcert、$ cert); //デフォルトの形式は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); return $ this-> xmltoarray($ data); } else {$ error = curl_errno($ ch);エコー「カールエラー、エラーコード:$エラー」。 "<br>"; curl_close($ ch); falseを返します。 }}企業は個人に支払います
//エンタープライズは、個々のパブリック関数Paytouser($ params、$ key、$ apcent_cert、$ apiclient_key){$ url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //必要なパラメーターの検出if($ params ["partner_trade_no"] == null){// exit( "refund application interface、必要なパラメーターpartner_trade_no!"。 "<br>"); } elseif($ params ["openid"] == null){exit( "fund application interface、必要なパラメーターopenid!" <br> "); } elseif($ params ["check_name"] == null){// no_check:no rearame vidification force_check:本名の強い検証(本物の名前認証のないユーザーは検証できず、転送は転送できません)option_check:本物の名前が検証されていないユーザーの譲渡は、expective ofsed of expectived expecting exhing exhine experifient必要なパラメーター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 ["lument"] == null){exit( "払い戻しアプリケーションインターフェイス、必要なパラメーター額はありません!" <br> "); } elseif($ params ["desc"] == null){exit( "refund application interface、必要なパラメーターdesc!" "<br>"); } $ params ["mch_appid"] = $ this-> appid; // publicアカウントid $ $ params ["mchid"] = $ this-> mchid; // merchant number $ params ["nonce_str"] = $ this-> createNoncestr(); //ランダムな文字列$パラマ'192.127.1.1':$ _server ['remote_addr']; // get ip $ params ["sign"] = $ this-> getsign($ params、$ key); // signature $ xml = $ this-> arraytoxml($ params); return $ this-> postxmlsslcurl($ xml、$ url、false、$ apcent_cert、$ apiclient_key);}事業支払い
private function _enterprisepay($ number、$ member_id、$ hish、$ desc){// get 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'、 'ron' => $ homent、// total 'desc' => $ desc、); $ result = $ Enterprise-> paytouser($ params、$ pay ['key']、$ pay ['apiclient_cert']、$ pay ['apiclient_key']); $ resultを返します;}プロセスディストリビューターの引き出し
プライベート関数_handle($ truename、$ rice){//ハンドルディストリビューターの引き出し$ extreed = date( "ymdhis")。 strval(rand(1000、9999)); $ data = array( 'rebrowid' => $ rebrowid、 'store_id' => $ this-> store_id、 'member_id' => $ this-> member_id、 'truename' = $ truename、 'frice' = $ frice、 'addtime' => time(); //監査なしif($ price> = c( 'regrow_uncheck_value')){$ data ['need_check'] = 0; $ data ['status'] = 1; if($ this-> regrotmodel-> add($ data)){$ result = $ this-> _ exterprisepay($ extreed、$ this-> member_id、$ price * 100、 'distribution('。$ truename。 ')extree'); //支払い情報のエラーの後、($ result ['return_code']!= 'success'){$ this-> extreeModel-> where(array( 'regrotid' => $ regrovid)) - > sauray( 'need_check' => 1、 'status' => 0)); $ this-> assign( 'success'、2); } else {// wechatトランザクション番号を設定します$ this-> extreemodel-> where(array( 'regrowid' => $ rebrotd)) - > sauray( 'payune_no' => $ result ['payment_no'])); //委員会のフローを増やし、固定するために、$ data = array( 'store_id' => $ this-> store_id、 'user_type' => 2、 'user_id' => $ $ this-> shop_type '=> 2、' trade_no '=> $ extreed、' => sovetry '=> $' => => time()); m( 'twitter_log') - > add($ data); //対応するコミッションM( 'メンバー') - > where(array( 'id' => $ this-> member_id)) - > setinc( 'money'、 - $ frice); $ this-> assign( 'success'、1); //委員会の送信メッセージの変更インポート( '@。Action.tmplmsg'); $ tmplmsg = new Tmplmsg(); $ tmplmsg-> send(tmplmsg :: price_change、$ this-> member_id、array( 'token' => $ this-> token、 'intro' => '流通委員会の引き渡し' => $ frice、 'business' => business)); }} else {$ this-> error( '現金引き出し情報エラー!'); }} //レビューが必要ですelse elles {$ this-> regrotmodel-> add($ data); $ this-> assign( 'success'、2); }}ユーザーに支払いをする企業の機能を提供したり、APIインターフェイスを通じて支払いを支払ったり、WeChat Payment Merchant Platform Web機能を介して支払いを操作したりします。
親切なヒント:
◆同じ本質的なユーザーに支払うと、単一のトランザクションの毎日の制限は2W/2Wです
◆同じ非リアルユーザーへの支払い、単一のトランザクションと2000/2000の1回の1日の制限があります
◆同じ日の商人の総支払い制限は100Wです
◆商人番号に縛られたAppIDのみがサポートされています。
◆支払いのターゲットユーザーの場合、WeChat Payによって認証されたユーザーは、実際の名前を確認する機能を提供できます。本名で認証されていないユーザーは確認できません。企業は、自分のビジネスのセキュリティレベルに基づいて検証タイプを選択できます。
◆支払い額は、現在利用可能な金額以下でなければなりません。
◆有料記録の場合、企業はエンタープライズ支払いクエリを通じて対応するデータを表示できます。
到着
支払い基金は、ターゲットユーザーの変更(WeChat-I-Wallet-Change)に入ります。 WeChat Payはアカウントの変更の通知を作成し、収入と支出の詳細の変更が表示されます。
親切なヒント:
Changeアカウントの履歴クライアントバージョンの場合、ファンドはユーザーのRed Envelopeアカウントに入力され、WeChat Payはメッセージなしでユーザーに通知し、企業は自分でユーザーにリーチすることを選択できます。
インターフェイスリンク:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
必要な証明書です
リクエストには双方向証明書が必要です。
データ例:
<xml> <mch_appid> wxe062425f740c30d8 </mch_appid> <mchid> 10000098 </mchid> <nonce_str> 3pg2j4iltkch16cq2502si8znmt M67vs </nonce_str> <partner_trade_no> 100000982014120919616 </partner_trade_no> <openid> oho4gt7wvpxit1a9gjfamymiz y1s </openid> <check_name> option_check </check_name> <re_user_name> zhang san </re_user_name> <happy> happyホリデー!</desc> <spbill_create_ip> 10.2.3.10 </spbill_create_ip> <sign> c97bdbacf37622775366f38b629f5e3 </sign> </xml>
成功した例:
<xml> <return_code> <![cdata [success]]> </return_code> <return_msg> <![cdata []]> </return_msg> <mch_appid> <![cdata [wxec38b8ff840 bd989]]> </mch_appid> <mchid> <![cdata [10013274]]> </mchid> <device_info> <![cdata []]> </device_info> <nonce_str> <![cdata [lxudzmnr jpcxzxlx0q]]> </nonce_str> <result_code> <![cdata [success]]> </result_code> <partner_trade_no> <![cdata [100135742015051915265824 41]]> </partner_trade_no> <payment_no> <![cdata [1000018301505190181489473]]> </soby_no> <payment_time> <![cdata [2015-05-19 15:26:59]]> </payment_time> </xml>
エラー例:
<xml> <return_code> <![cdata [fail]> </return_code> <return_msg> <![cdata [system is busy、もう一度やり直してください後で。]]]> </return_msg> <result_code> <![cdata [fail]]> </result_code> <err_code> <![cdata [systemerror]]> </err_code> <err_code_des> <![cdata [busy、busy、reas reas date。]> </err_code_des> xml>
PHP関連のコンテンツの詳細については、このサイトのトピックをご覧ください:「PHP Wechat開発スキルの要約」、「PHPエンコーディングおよびトランスコーディング操作技術の要約」、「PHPネットワークプログラミング技術の要約」、「PHP Basic Syntax Tutorialの紹介」、「PHP String usage of Php Database Operationの概要」、「概要」、「概要」、「概要」の概要テクニック」
この記事に記載されているPHPでWeChatエンタープライズアカウントの支払いを実装する方法の詳細な説明が、PHPプログラミングを学ぶために誰でも役立つことを願っています。誰もが間違った新しいテクノロジーチャネルをサポートし続けることを願っています!