私は最近書いたWeChatの支払いについてブログを読んだことがありますが、それを読んでいる人がかなりいます。ブログが十分に詳細ではないのか、それとも何が起こっているのかはわかりません。それらのほとんどは私にソースコードを求めています。プログラマーはまだそのような思考プロセスを持つ必要があると思うので、ソースコードを直接提供しませんでした。ことわざにあるように、「釣りをするよりも釣り方を人々に教える方が良い」したがって、記事を読んでいる間、自分でコードを代表するのに時間がかかることを望んでいます。わかりました、あまりナンセンスを言わないでください。今回は、Wechat Cash Red Envelopeインターフェイスの使用を共有します。
以下は、WeChat Development DocumentsによるCash Red Envelopesの紹介です。
Cash Red Envelopesは、WeChat Payment Merchant Platformが提供するマーケティングツールの1つです。発売以来、彼らは商人やユーザーに愛されてきました。マーチャントは、このプラットフォームを介して、Cash Red Envelopersを支払いユーザーに配布できます。ユーザーが赤いエンベロープを受け取った後、ファンドはユーザーのWeChat Payment Changeアカウントに到着します。これは、コインウォレットの他の資金と同じ使用法を展開します。ユーザーがそれらを受け取らない場合、24時間後に資金は商人のWeChat支払い口座に返還されます。
製品の意味
Wechat Payment Cash Red Envelopesは、資金を現金で運ぶ方法のために、ユーザーに常に好まれています。近年、現金の赤い封筒が重要な役割を果たしてきました。彼らはまた、日常業務における商人のマーケティング活動に温かい反応をもたらしました。一般に、現金の赤い封筒は、以下を含むがこれらに限定されないシナリオで重要な役割を果たします。
要約すると、WeChat Cash Red Envelopesは、公式アカウント、登録などをフォローすることでユーザーの粘着性を高めることができるマーケティングツールです。今回は、プログラム開発の観点から経験を共有することに焦点を当てています。
1。Wechat Cash Red Envelope機能を使用するために必要な条件
1. WeChat Merchantプラットフォームと完全な秘密証明書を持っている
2。商人は使用するのに十分なバランスが必要です(十分でない場合は、TenPayを使用して商人プラットフォームから充電できます)
3. WeChatの支払いのためのより良い開発財団
2番目の開発の重要なポイントと困難
1 Wechat署名アルゴリズム
2 httppclientと証明書の使用
3 Wechatドキュメントの読み取り(https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)
WeChat H5の支払いがある場合、またはQRコードをスキャンして支払う場合は、ドキュメントのこの部分であるケーキを読むことができます。理解するのは楽なことです。同時に、HTTPClientの知識を習得する限り、すべてが準備が整います。
3つの直接コード
public static void sendredpack(string mch_billno、string openid、string send_name、string total_fee、string total_num、string wishing、string act_name、string ermad、string ip)slows {string non = paycommonutil.createnoncestr(); sortedmap <object、object> p = new Treemap <object、object>(); p.put( "nonce_str"、non); P.put( "mch_billno"、mch_billno); p.put( "mch_id"、configutil.mch_id); p.put( "wxappid"、configutil.appid); p.put( "re_openid"、openid); p.put( "total_amount"、total_fee); p.put( "total_num"、 "1"); p.put( "client_ip"、 "127.0.0.1"); p.put( "act_name"、act_name); p.put( "send_name"、send_name); p.put( "希望"、希望); p.put( "areg"、areg); string sign = paycommonutil.createsign( "utf-8"、p); System.out.println(sign); p.put( "sign"、sign); string reuqestxml = paycommonutil.getRequestXml(P); keystore keystore = keystore.getInstance( "pkcs12"); fileInputStream entream = new fileInputStream(new file(configutil.cert_path)); try {keystore.load(instream、configutil.mch_id.tochararray()); }最後に{enterstream.close(); } sslcontext sslcontext = sslcontexts.custom()。loadkeymaterial(keystore、configutil.mch_id.tochararray())。build(); SSLConnectionSocketFactory SSLSF = new SSLConnectionSocketFactory(SSLContext、new String [] {"Tlsv1"}、null、sslconnectionsocketfactory.browser_compatible_hostname_verifier); closeablehttpclient httpclient = httpclient.custom().setsslsocketfactory(sslsf).build(); try {httppost httppost = new httppost( "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); system.out.println( "requestの実行" + httppost.getRequestline()); //要求されたXMLはISO8859-1エンコーディングにトランスコードする必要があります。そうしないと、赤いエンベロープ表示エラーの署名エラーまたはテキストが発生しやすくなります。 //タイプhttppost.setentity(reqentity); closeablehttpresponse応答= httpclient.execute(httppost); try {httpentity entity = respons.getEntity(); System.out.println("----------------------------------------"); system.out.println(respons.getStatusline()); if(entity!= null){system.out.println( "応答コンテンツ長:" + entity.getContentLength()); BufferedReader BufferedReader = new BufferedReader(new inputStreamReader(entity.getContent()、 "utf-8"));文字列テキスト; while((text = bufferedreader.readline())!= null){system.out.println(text); }} entityutils.consume(entity); }最後に{respons.close(); }}最後に{httpclient.close(); }}次のポイントは次のとおりです。
//要求されたXMLをISO8859-1エンコーディングにトランスコードする必要があります。そうしないと、赤いエンベロープでエラーまたはテキスト表示に署名する傾向があります。
Stringentity reqentity = new Stringentity(new String(reuqestxml.getBytes()、 "ISO8859-1"));
この場所は、私をほとんどクラッシュさせ、さまざまなデバッグを試したと言えます。試してみてください態度で追加しても大丈夫でしょう。これは、データ送信におけるHTTPCLIENTとネイティブHTTPSConnectionの違いが原因である可能性があります。ここではあまり研究はありません。
この方法を呼び出すのは、次のように簡単です
public static void main(string args []){try {sendredpack( "12828839012016101420"、 "受信者のopenid"、 "xxx"、 "100"、 "1"、 "おめでとうございます。 } catch(例外e){// todo auto-enerated catch block e.printstacktrace(); }}赤い封筒が送信された後に印刷された情報は次のとおりです。
TTP/1.1 200 OK応答コンテンツの長さ:567 <XML> <return_code> <![cdata [success]]> </err_code> <err_code_des> <![cdata [success]]> </err_code> <err_code_des> <![cdata [cudata]]> </err_code> <mch_billno> <![cdata [12828839012016101421]]> </mch_billno> <mch_id> <![cdata [1282883901]] <re_openid> <![cdata [xxxx]]> </re_openid> <total_amount> 100 </total_amount> <send_listid> <![cdata [100004170120161014300000090813093]]]> </send_listid> </xml>
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。