Recientemente, el desarrollo del pago de la cuenta pública de WeChat se ha explorado durante unos días porque se ha realizado por primera vez, y solo ha alcanzado el nivel de función de implementación.
El pago general de la cuenta pública de WeChat es en realidad muy simple, y se divide aproximadamente en tres pasos. El primer paso debe obtenerse mediante la autorización del usuario; Lo siguiente presenta el proceso de desarrollo de cada paso.
En primer lugar, es necesario aclarar que el pago de la cuenta pública de WeChat es un pago de la versión web, por lo que es necesario un paso más de autorización de WeChat que la aplicación recuperó directamente el pago de WeChat. Es decir, debe obtener el OpenID del usuario. El tipo de transacción utilizada por la cuenta pública de WeChat es JSAPI, por lo que el documento de la interfaz de orden unificado se escribe claramente en
Por lo tanto, debemos obtener OpenID, y al mismo tiempo podemos manejar una lógica que necesitamos. Hay dos formas de obtener la autorización del usuario: 1.scope = snsapi_base;
El alcance es snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&rdirect_uri=http%2fchong.qq.com%2fphpphp%2findex.php%3fd%3d%26c%3dwwapter título% 3D1%26VB2TAG%3D4_2030_5_1194_60 & Response_Type = Code & Scope = SNSAPI_BASE & STATE = 123#weChat_redirect
El alcance es snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3a%2 Echat_redirect
El documento oficial de WeChat también tiene una explicación detallada de cada parámetro, y explicaré cuidadosamente los parámetros clave. En primer lugar, la APPID no es mucho decir que la APPID de su cuenta pública de WeChat está fijada a la muerte. Puede coser los parámetros que necesita en este enlace. Los parámetros estatales pueden entenderse como campos extendidos. El siguiente es el clip de código de OpenID.
// Obtener 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 ClassStoken {String privado Access_Token; Return expires_in;} public void setExpires_in (string expires_in) {this.expires_in = expires_in; OpenId;} public void setOpenID (String OpenId) {this.openID = OpenId;} 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; OpenID = " + OpenID +", Scope = " + Scope +", UnionId = " + UnionId +"] "]"] "En segundo lugar, después de obtener OpenID, podemos llevar a cabo la próxima colocación unificada de pedidos. El documento de la interfaz única en WeChat es más detallado, y no presentaré el significado de parámetros específico. El código más intuitivo se publica a continuación, especialmente recordando que debe prestar atención a la firma correcta. La clave utilizada en la firma no es AppSecret, sino la clave de comerciante que definió cuando solicita.
// Uniforme el orden wxpaysenddata data = new wxpaysendData (); ; IP); alias ("xml", wxpayreturndata.class);UnifiedorDerservice.java
Public Class UnifiederService {Private final Static logger = loggerFactory.getLogger (unifiDORNDERService.class); Objeto, parámetros> new Treemap <Object, Object> (); ; .getout_trade_no ()); ", Data.getOpenId ()); parameters.put (" dispositivo_info ", d ata.getDevice_info ()); logger.info (" firmar: "+wxsign.createsign (parámetros, clave)); F-8", nuevo XMLFIRYLYNAMECODER ("- _", "_"); xml); " + Returnxml);} catch (Exception e) {E.PrintStackTrace ();} return Returnxml;}}}}}}}}}Wxsign
Clase pública WXSIGN {String static privado CaractererEncoding = "UTF-8"; Parámetros.entryset (); IT. {sb.append (k + "=" + v + "&");}} sb.append ("key =" + key); ); {Return String.ValueOf (System.CurrentTtimemillis () / 1000);}}Lo último que debe mencionar es la dirección de devolución de llamada Notify_URL para recibir la dirección de devolución de llamada de notificación asíncrona de pago WeChat.
Hemos obtenido la preparación de la preparación de la transacción previa al pago, para que podamos realizar la operación del último paso. Use H5 para ajustar la API de pago.
// H5 Attrew Up Attr.Addattribute ("Appid", redata.getAppid ()); ); ; "Appid", redata.getAppid ()); ); ", wxsign.createSign (SignMap, wxpayconfig.key));Después de pasar los parámetros requeridos a la página, use WeChat para proporcionar un método para configurar el pago.
<script> function getUrlParam (name) {// construye un objeto de expresión regular que contiene parámetros de destino var reg = new Regexp ("(^| &)" + name + "= ([^&]*) (& | $))) "); // Haga coincidir el parámetro de destino var r = window.location.search.substr (1) .match (reg); // devuelve el valor del parámetro if (r! = null) return unescape (r [2]); NULL;} function onBridgeReady () {var appid = getUrlParam ('appid'); 'Firme'); TimeStamp, // "1395712654", // timelia, el segundo número de segundos desde 1970 "noncestr": noncestr, // "e61463f8efa94090b1f366cccffbbb444", // paquete "ge, //" prepay_id = u802345jgfjsdgsdgsdgsdgs ": Firma, //" md5 ", // método de firma wechat:" paysign ": paysign, //" 70ea570631e4bb79628fbca905343ffadd89 "" // wechat firma}, función (res) {// Utilice el método anterior para juzgar el front end end end end end. De vuelta, el equipo de WeChat recuerda solemnemente: Res.err_msg volverá a OK después de que el usuario paga correctamente, pero no garantiza que sea absolutamente confiable ("" éxito de pago ");} if (res.err_msg ==" get_brand_wcpay_request: cancelar ") {alert (" Cancelación de transacciones ");} if (res.err_msg ==" get_wcpay_request: fail ") lert (" falla de pago ");}});} función callPay () {si (typeOf weixinjsbridge == "Underfined") {if (document.adDeventRistener) {document.adDeventListener ('wei xinjsbridgeReady', onbridgeReady, false);} else if (document .atachevent) {document.attachevent ('weixinjsbridgereidy', onbridgereidy); AttachEvent ('OnweixInjsBridgeReady', onBridgeReady);}} else {onBridgeReady ();}} </script>Puede personalizar su propia página de devolución donde devuelve el resultado.
RESUMEN: Dado que también lo hago por primera vez, escribir este artículo es registrar los resultados de mi trabajo, y los amigos que comparten con novatos pueden tener algo de ayuda. progreso.
Lo anterior es todo el contenido del desarrollo de Java del pago público de WeChat.