最近、WeChatのパブリックアカウントの支払いは、初めて行われたため、数日間調査されており、実装機能のレベルにしか到達していません
WeChatパブリックアカウントの全体的な支払いは実際には非常に単純であり、ほぼ3つのステップに分かれています。最初のステップは、ユーザー認証によって取得する必要があります。以下は、各ステップの開発プロセスを紹介します。
まず第一に、WeChat Public Accountの支払いがWebバージョンの支払いであることを明確にする必要があるため、アプリがWeChatの支払いを直接取得したよりも、より多くのWeChat認証を1つのステップで必要とする必要があります。つまり、ユーザーのOpenIDを取得する必要があります。 WeChat Publicアカウントで使用されるトランザクションのタイプはJSAPIであるため、統一された注文インターフェイスのドキュメントは明確に書かれています
したがって、OpenIDを取得する必要があり、同時に必要なロジックを処理できます。ユーザー認証を取得するには、Snsapi_base;
スコープはsnsapi_baseです
https://open.weixin.qqc.com/connect/oauth2/authorize?appid=wx520c15f417810387&rdirect_uri = http%2fchong.QQQQQQQQQQQQQQQQQQQQQQQQQQQQQC% aytitle% 3D1%26VB2CTAG%3D4_2030_5_1194_60&Response_type = code&scope = snsapi_base&state = 123#wechat_redirect
スコープはsnsapi_userinfoです
https://open.weixin.qqc.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3a% wechat_redirect
WeChatの公式文書には、各パラメーターの詳細な説明もあります。重要なパラメーターについては注意深く説明します。まず、APPIDは、WeChatパブリックアカウントのAPPIDが死亡していると言うことはあまりありません。このリンクで必要なパラメーターを縫うことができます。状態パラメーターは、拡張フィールドとして理解できます。以下は、OpenIDのコードクリップです。
// openid httpclientutil util = httpclientutil.getInstance(); 、wxpayconfig.appsecret); /sns/oauth2/access_token "、null、map); logger.info(" returnstr:[" + returnstr +"] "); accessstoken at = json.parseobject(returnstr、accessstoken.c lass);
AccessToken.java
Public AccessStoken {Private String_in; return expires_in;} public void setexpires_in(string expires_in){this.expires_in = public string getrefresh_token(){return refrech_token;} public void setrefresh_token(string refresh_token){this.refresh_token = refresh_token;} openID;} public void setopenid(string openid){this.openid = openid;} public string e(){return scope;} public void setScope(this.scope = scope;} public string getunionid(){return Unionid;} public void setunionid(string nionid){this.unionid = nionid; OpenID = " + openID +"、scope = " + scope +"、nionid = " + nionid +"] "]"] "第二に、OpenIDを取得した後、次の統一された注文の配置を実行できます。 WeChatの単一インターフェイスのドキュメントはより詳細であり、特定のパラメーターの意味を紹介しません。最も直感的なコードは以下に掲載されています。特に、正しい署名に注意を払わなければならないことを思い出させます。署名で使用されるキーは、控えめではなく、申請時に定義したマーチャントキーです。
// Order wxpaysenddata data = new wxpaysenddata() ; setnonce_str.setnotify_url(notify_url); ip); setopenid(at.getopenid();エイリアス( "xml"、wxpayreturndata.class);
unifidedorservice.java
Public Class UnifideRorderService {Private final static logger = loggerfactory.getLogger(unifideRornderservice.class); Object> parameters = new treemap <object>(); ; parameters.put( "mch_id"、data.getnononce_str()、data.getNotify_url(); .getOut_trade_no()); pupt( "total_fee"、data.gettal_fee eters( "trade_type");; "spbill_create_ip"、data.getspbill_createe_ip()); "、data.getopenid()); parameters.put(" device_info "、d ata.getdevice_info()); ogger.info(" sign: "+wxsign.createsign(parameters、key)); f-8"、new new xmlfriendlynamecoder( " - _"、 "_"); XML); " + returnXml);} catch(Exception e){e.printstacktrace();} return returnxml;}}}}}}}}}}}}}}}}}}}}}}}}}}}wxsign
public class wxsign {private string carchereChoreCoding = "utf-8";パラメーター.Entryset(); it(); string.getKey(); {sb.append(k + "=" + v + ");}} sb.append(" key = " + key); )リターンサイン;} public static string getnostr(){random = new random(); {return string.valueof(system.currentttimemillis() / 1000);}}最後に言及するのは、weChatの支払い非同期通知コールバックアドレスを受信するnotify_urlコールバックアドレスです。
最後のステップ操作を実行できるように、事前給与取引の準備の準備を取得しました。 H5を使用して、支払いAPIを調整します。
// h5ターンアップ支払いattr.addattribute( "appid"、redata.getappid()); )attr.addattribute( "prepay_id ="+redata.addattribute( "signtype"、 "md5"); ; "appid"、redata.getMap.put( "timestamp()); ; signmap.put( "signtype"、 "paysign:"+wxsign.createsign "、wxsign.createsign(signmap、wxpayconfig.key));
必要なパラメーターをページに渡した後、WeChatを使用して支払いをセットアップする方法を提供します。
<script>関数geturlparam(name){//ターゲットパラメーターを含む正規表現オブジェクトを構築するvar reg = new regexp( "(^|&)" + name + "=([^&]*)(&| $))) ");/ null;} onbridgeready(){geturlparam( 'appid')= geturlparam( 'timestamp'); 'signtype'); var paysign = geturlparam( 'paysign');タイムスタンプ、// "1395712654"、// Timelia、1970年以来の2番目の秒数:非網、// "e61463f8EFA94090B1F366CCFBBB444"、//ランダムな文字列「パッケージ」 ":signtype、//" md5 "、// wechat signature method:" paysign ":paysign、//" 70ea570631e4b79628fbca905343ffadd89 "" // wechat signature}、function(res){//上記の方法を使用する戻って、WeChatチームは厳soleに思い出させます:res.err_msgは、ユーザーが正常に支払うとOKに戻りますが、それが絶対に信頼できることを保証しません。 get_brand_wcpay_request:cancel "){alert("トランザクションキャンセル ");} if(res.err_msg ==" get_wcpay_request:fail ")lert("支払い失敗 ");}}) == "Under -fined"){if(document.addeventristener){document.addeventlistener( 'wei xinjsbridgeready'、onbridgeready、false);} else(document .atachevent){document.attachevent( 'weixinjsbridgeridy'、 ActitionEvent( 'onweixinjsbridgeready'、onbridgeready);}} else {onbridgeready();}} </script>結果を返す独自の返品ページをカスタマイズできます。
要約:私は初めてそれを行うことで、この記事を書くことは私の仕事の結果を記録することです進捗。
上記は、JavaのWeChat Public Paymentの開発のすべてです。