Récemment, le développement du paiement du compte public WeChat a été exploré depuis quelques jours car il a été fait pour la première fois, et il n'a atteint le niveau de la fonction de mise en œuvre.
Le paiement global du compte public WeChat est en fait très simple et il est à peu près divisé en trois étapes. La première étape doit être obtenue par autorisation de l'utilisateur; Ce qui suit introduit le processus de développement de chaque étape.
Tout d'abord, il est nécessaire de clarifier que le paiement du compte public WeChat est un paiement de version Web, il est donc nécessaire d'une étape plus d'autorisation WeChat que l'application rétractable le paiement de WeChat. Autrement dit, vous devez obtenir l'OpenID de l'utilisateur. Le type de transaction utilisé par WeChat Public Account est JSAPI, donc le document de l'interface d'ordre unifié est clairement écrit pour
Par conséquent, nous devons être ouverts, et en même temps, nous pouvons gérer une logique dont nous avons besoin. Il existe deux façons d'obtenir l'autorisation de l'utilisateur: 1.Scope = snsapi_base; 2.Scope = snsapi_userinfo.
La portée est SNSAPI_BASE
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&rdirect_uri=http%2fchong.qq.com%2fphphp%2findex.php% 3f% 3d% 26c% 3dwxadapter Titre% 3d1% 26VB2CTAG% 3D4_2030_5_1194_60 & Response_Type = Code & Scope = SNSAPI_BASE & State = 123 # WeChat_Redirect
Scope est snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=WXF0E81C3BEE622D60&redirect_uri=http%3A%2 F% 2FNBA.Bluewebgame.com% 2foAuth_Sespir echat_redirect
Le document officiel de WeChat a également une explication détaillée de chaque paramètre, et j'expliquerai attentivement les paramètres clés. Tout d'abord, l'Appid n'est pas grand-chose à dire que le compte public WeChat est corrigé. Vous pouvez coudre les paramètres dont vous avez besoin sur ce lien. Les paramètres d'état peuvent être compris comme des champs étendus. Ce qui suit est le clip de code d'OpenID.
// Obtenez OpenId httpClientUtil util = httpclientUtil.getInstance (); , Wxpayconfig.appset); / Sns / oauth2 / access_token ", null, map); logger.info (" returnstr: ["+ returnstr +"] "); accessStoken at = json.parseObject (returnstr, accessStoken.c lass);AccessToken.java
Classe publique AccessStoken {String Private Access_token; Return expires_in;} public void setExpires_in (String expires_in) {this.expires_in = expires_in; public string getRefresh_token () {return refresh_token;} public void SetRefr OpenId;} public void setOpenID (string openId) {this.openID = openId;} public String e () {return scope;} public void setscope (string scope) {this.scope = scope;} public String getUnionId () {return UnionId;} public void setunionID (String UnionId) {this.UnionId = UnionId; String ToString () {return "AccessStoken [Access_token =" + Access_token + ", expires_in =" + expires_in + " OpenID = "+ openID +", scope = "+ scope +", unionId = "+ UnionId +"] "]"] "Deuxièmement, après avoir obtenu OpenID, nous pouvons effectuer le prochain placement unifié des commandes. Le document de l'interface unique sur WeChat est plus détaillé, et je n'introduirai pas la signification du paramètre spécifique. Le code le plus intuitif est affiché ci-dessous, rappelant en particulier que vous devez faire attention à la bonne signature. La clé utilisée dans la signature n'est pas AppSecret mais la clé marchande que vous avez définie lorsque vous postulez.
// Uniform The Order WxpaySendData Data = New WxpaySendData (); ; IP); alias ("xml", wxpayreturndata.class);Unifiedorderservice.java
Classe publique UnifiedOrderService {private final STATIC Logger = LoggerFactory.getLogger (UnifiedornDervice.Class); Public Static String FiedorD (wxpaySendata Data, String Key) {// Ordre uniforme pour payer la chaîne RETOURXML = NULL; Objet, objet> Paramètres = nouveau Treemap <objet, objet> (); ; .getout_trade_no ()); ", Data.getOpenID ()); paramètres.put (" device_info ", d ata.getdevice_info ()); logger.info (" signe: "+ wxsign.createsign (paramètres, clé)); f-8", nouveau XmlfriendLyNamEcoder ("- _", "_")); XML); "+ Returnxml);} catch (exception e) {e.printStackTrace ();} return returnXml;}}}}}}}}}Wxsign
Classe publique WXSIGN {STATIQUE STATIQUE PRIVÉE LA LIGNE DE LA STATIQUE = "UTF-8"; Paramètres.EntrySet (); it. {sb.append (k + "=" + v + "&");}} sb.append ("key =" + key); ); {Return String.Valueof (System.CurrentTtimeMillis () / 1000);}}La dernière chose à mentionner est l'adresse de rappel Notify_url pour recevoir l'adresse de rappel de notification asynchrone de paiement WeChat.
Nous avons obtenu la préparation de la préparation de la transaction de pré-paiement, afin que nous puissions effectuer la dernière opération d'étape. Utilisez H5 pour ajuster l'API de paiement.
// H5 Turn Up Payment att.AddAttribute ("AppID", redata.getAppid ()); ); ; appid ", redata.getappid ()); )); ", wxsign.CreateSign (signmap, wxpayconfig.key));Après avoir passé les paramètres requis à la page, utilisez WeChat pour fournir une méthode pour configurer le paiement.
<Script> Fonction getUrlParam (name) {// Construire un objet d'expression régulière contenant des paramètres cibles var reg = new regexp ("(^ | &)" + name + "= ([^ &] *) (& | $)) "); // correspond au paramètre cible var r = window.location.search.substr (1) .match (reg); // renvoie la valeur du paramètre if (r! = null) return Unescape (r [2]); NULL;} Fonction ONBRIDGERADY () {var appid = getUrlparam ('appid'); 'SignType'); Timestamp, // "1395712654", // Timelia, le deuxième nombre de secondes depuis 1970 "noncestr": noncestr, // "e61463f8efa94090b1f3666cccfbbb444", // package aléatoire "Ge, //" pre-`` "888888888888888888888888888888888888888888888888888888888888888888888880 ": SignType, //" MD5 ", // Méthode de signature WeChat:" PAYSIGN ": PAYSIGN, //" 70EA570631E4BB79628FBCA905343FFADD89 "" // WECHAT Signature}, fonction (res) {// Utiliser la méthode ci-dessus pour juger le front De retour, l'équipe WeChat rappelle solennellement: Res.err_msg reviendra à OK après que l'utilisateur paie avec succès, mais il ne garantit pas qu'il est absolument fiable. get_brand_wcpay_request: annuler ") {alert (" transaction annulation ");} if (res.err_msg ==" get_wcpay_request: fail ") let (" Payofsel ");}});} fonction callpay () {if (typeoFinjsbridge == "Underfined") {if (document.addeventRristEner) {document.addeventListener ('wei xinjsbridgeready', onbridgeready, false);} else if (document .atachevent) {Document.attachevent ('weixinjsbridgereidy', onBridGereIdy); attachEvent ('onweixinjsbridgeready', onBridgeready);}} else {onBridgeready ();}} </script>Vous pouvez personnaliser votre propre page de retour où vous retournez le résultat.
Résumé: Puisque je le fais également pour la première fois, la rédaction de cet article est d'enregistrer mes résultats de travail, et les amis qui partagent avec novice peuvent avoir de l'aide. progrès.
Ce qui précède est tout le contenu du développement de Java du paiement public WeChat.