He leído el blog sobre el pago de WeChat que escribí en estos días, y hay bastantes personas que lo leen. No sé si es porque el blog no es lo suficientemente detallado o lo que está sucediendo. La mayoría de ellos me piden el código fuente. Creo que los programadores aún necesitan tener un proceso de pensamiento de este tipo, por lo que no dieron el código fuente directamente. Como dice el dicho, "es mejor enseñar a las personas cómo pescar que pescar". Por lo tanto, espero tomarme un tiempo para tipificar el código usted mismo mientras lee el artículo. Ok, no digamos muchas tonterías. Esta vez compartiré el uso de la interfaz WeChat Cash Red Envelope.
La siguiente es una introducción a los sobres rojos en efectivo por los documentos de desarrollo de WeChat:
Los sobres rojos en efectivo son una de las herramientas de marketing proporcionadas por la plataforma de comerciante de pagos de WeChat. Desde su lanzamiento, han sido amados por comerciantes y usuarios. Los comerciantes pueden distribuir sobres rojos en efectivo a los usuarios de pagos a través de esta plataforma. Después de que el usuario recibe el sobre rojo, los fondos llegan a la cuenta de cambio de pago WeChat del usuario, que tiene la misma exportación de uso que otros fondos en la billetera de monedas; Si el usuario no los recibe, los fondos serán devueltos a la cuenta de pago WeChat del comerciante después de 24 horas.
Significado del producto
El pago de WeChat en efectivo, los sobres rojos siempre han sido favorecidos por los usuarios debido a la forma en que llevan fondos en efectivo. En los últimos años, los sobres Red Red han jugado un papel importante; También han traído respuestas cálidas a las actividades de marketing de los comerciantes en las operaciones diarias. En general, los sobres rojos en efectivo juegan un papel importante en los escenarios que incluyen, entre otros::
Para resumir, los sobres rojos de WeChat Cash son una herramienta de marketing que puede aumentar la adherencia del usuario siguiendo cuentas oficiales, registrándose, etc. Esta vez, me concentro en compartir mis experiencias desde la perspectiva del desarrollo del programa
1. Condiciones requeridas para usar la función de envolvente rojo de WeChat Cash
1. Tener una plataforma comercial de WeChat y completar certificados secretos
2. Los comerciantes deben tener suficiente equilibrio para usar (si no es suficiente, puede usar TenPay para recargar de la plataforma comercial)
3. Mejor Fundación de Desarrollo para el pago de WeChat
Los puntos clave y las dificultades del segundo desarrollo
1 algoritmo de firma WeChat
2 httppclient y el uso de certificados
3 Lectura de documentos WeChat (https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)
Si tiene un pago WeChat H5 o escanea el código QR para pagar, puede leer esta parte del documento, que es un pedazo de pastel. Es fácil de entender. Al mismo tiempo, mientras domines el conocimiento de HttpClient, todo estará listo.
Tres código directo
public static void sendredpack (string mch_billno, string openId, string send_name, string Total_fee, String Total_num, String Wishing, String Act_name, String Observe, String IP) arroja excepción {String non = payCommonutil.createNoncestr (); SortedMap <Object, Object> P = New Treemap <Object, Object> (); p.put ("nonce_str", no); 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 ("deseando", deseando); p.put ("comentario", observación); Firma de cadena = PayCommonUtil.CreateSign ("UTF-8", P); System.out.println (signo); p.put ("firmar", firmar); Cadena reuqestxml = payCommonUtil.getRequestXml (p); KeyStore KeyStore = KeyStore.getInstance ("PKCS12"); FileInputStream Insteam = new FileInputStream (nuevo archivo (configUtil.cert_path)); Pruebe {KeyStore.Load (Intilam, configUtil.mch_id.toCarArray ()); } finalmente {enterTream.close (); } SslContext sslContext = sslContexts.custom (). LoadKeMaterial (KeyStore, configUtil.mch_id.toCarArray ()). Build (); SslconnectionsocketFactory sslsf = new SSLConnectionsocketFactory (SSLContext, new String [] {"TLSV1"}, NULL, SSLConnectionSocketFactory.Browser_Compatible_HostName_verifier); ClosableHttpClient httpClient = httpclients.custom () .setsslsocketFactory (sslsf) .build (); Pruebe {httppost httppost = new httppost ("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); // reembolso de interfaz httppost.addheader ("content-type", "application/x-www-form-urlencoded; charset = charset = quarbetset = 8); System.out.println ("Ejecución de solicitud" + httppost.getRequestline ()); // El XML solicitado debe transcodarse a la codificación ISO8859-1, de lo contrario, es propenso a los errores de firma o el texto en los errores de la envoltura roja de los errores StringEdity reqentity = new StringEntity (new String (reuqestxml.getBytes (), "ISO8859-1")); // establecer tipo httppost.setEntity (reqentity); Respuesta ClosableHttPResponse = httpClient.Execute (httppost); intente {httpentity entity = respuesta.getEntity (); System.out.println ("----------------------------------------"); System.out.println (respuesta.getStatUsline ()); if (entity! = null) {System.out.println ("Longitud de contenido de respuesta:" + entity.getContentLength ()); BufferedReader BufferedReader = new BufferedReader (new InputStreamReader (entity.getContent (), "UTF-8")); Texto de cadena; while ((text = bufferedReader.readline ())! = null) {system.out.println (text); }} EntityUtils.consume (entidad); } Finalmente {Response.Close (); }} finalmente {httpclient.close (); }} Los siguientes puntos a tener en cuenta son:
// El XML solicitado debe transcodarse a la codificación ISO8859-1, de lo contrario es propenso a firmar errores o visualización de texto en el sobre rojo es incorrecto.
StringEntity reqentity = new StringEntity (new String (reuqestxml.getBytes (), "ISO8859-1"));
Se puede decir que este lugar casi me ha estrellado y probó varias depuraciones. Estaría bien agregarlo con una actitud de prueba y vista. Esto puede deberse a la diferencia entre HTTPClient y la HTTPSConnection nativa en la transmisión de datos. No se realiza mucha investigación aquí.
Llamar a este método es más fácil, al igual que el siguiente
public static void main (string args []) {try {sendedpack ("12828839012016101420", "OpenId del destinatario", "xxx", "100", "1", "felicitaciones por hacerse rico, todos los años", "Convelope rojo de año nuevo", "El envelope rojo del año nuevo no está agarrando", "127.0.0.0.0.0.1", ", el año nuevo"); } Catch (Exception e) {// TODO Auto Generado Bloque E.PrintStackTrace (); }} La información impresa después de que se envía el sobre rojo es la siguiente:
TTP/1.1 200 OK Respuesta Contenido Longitud de contenido: 567 <xml> <surne_code> <! [CDATA [Success]]> </Err_Code> <Irr_Code_Des> <! [CDATA [Succes]]> </Err_Code> <MCH_BILLNO> <! [CDATA [12828839012016101421]]> </mch_billno> <mch_id> <! [CDATA [1282883901]]> </mch_id> <wxappid> < <RE_OPENID> <! [CDATA [XXXX]]> </RE_OPENID> <TOTAL_AMOUNT> 100 </Total_amount> <ent_listid> <! [CDATA [1000041701201610143000090813093]]> </send_listid> </xml>
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.