El uso de sobres rojos WeChat ya es muy amplio. Este artículo presenta ejemplos de envío de sobres rojos en WeChat. Necesita una cuenta pública certificada, y puede abrir el pago de WeChat y la plataforma de comerciante y permitir los permisos de sobre en efectivo.
https://pay.weixin.qq.com Dirección de inicio de sesión comercial. Elija ver los paquetes rojos en efectivo en el centro de marketing
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1 Documento de sitio web oficial Descripción de efectivo sobres rojos
Veamos primero algunas pruebas simples. La premisa es que debe recargarse primero en la plataforma comercial. El pago anticipado no es compatible. Este artículo solo resume las llamadas y la implementación de la interfaz WeChat Cash Red Envelope. Específicamente, debe implementar cómo llamar a esta interfaz en función de su propio negocio.
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3 Hay todas las explicaciones para los sobreses rojos ordinarios en el documento. La llamada debe tener un certificado de la plataforma comercial.
Los parámetros requeridos también se enumeran. Decide según tus necesidades.
1.Java encapsula un objeto de envoltura roja
/*** Objeto de sobre rojo* @Author Xiao Shuai Shuai* @Date 2016-8-17 11:12:19 am* @open Source China http://my.oschina.net/xshuai*/public class Redpack implementa serializable {signo de cadena privado; // Verificación generada basada en atributos String private MCH_BILLNO; // Número de pedido Cadena privada MCH_ID; // número de comerciante cadena privada wxappid; // wechat appid string private send_name; // Nombre de comercio privado cadena re_openid;/user OpenId private private string total_amount; // Cantidad de pago Cadena privada Total_num; // El número de enjuague de entebla roja Destinados en efectivo en efectivo Red String Act_name de cadena privada; // Red Envele Bendición de String de String de String de String; Cadena nonce_str; // string aleatoria // establecer obtener omitido} 2. La clase de herramientas requerida CREATBILLNO es generar el número de pedido comercial. Los requisitos oficiales del documento del sitio web son los siguientes:
/*** Clase de herramienta de sobre rojo* @author xiao shuai shuai* @date 2016-8-17 11:12:19 am* @open Source China http://my.oschina.net/xshuai*/public class redpackutil {/*** generar el número de orden de comerciante* @param mch_id number* @param userid userid de usuario* de usuario de usuarios* Cadena estática createBillNo () {// Composition: mch_id+yyyymmdd+números de 10 dígitos que no se pueden repetir dentro de un día // Los números de 10 dígitos que no se pueden repetir dentro de un día son los siguientes: // porque cada usuario está vinculado a UserID, suDid es diferente, más el azar, generado (10 longitud (usuarido)) puede garantizar que estos 10 dígitos sean diferentes digits Dtt (), más el INTERIENTO, más el año. SimpleDateFormat df = new SimpleDateFormat ("yyyymmdd"); String NowTime = df.format (dt); int longitud = 10; return wxConstants.mch_id + ahora tiempo + getRandomNum (longitud); } / ** * Genere números aleatorios con dígitos específicos * @param longitud * @return * / public static string getRandomNum (int long) {String val = ""; Aleatorio aleatorio = new Random (); for (int i = 0; i <longitud; i ++) {val+= string.valueOf (random.nextint (10)); } return val; }} 3. El trabajo anterior es muy simple y requiere un certificado y un número de comerciante. Y si la plataforma comercial tiene una cantidad, puede probar la interfaz de sobre en efectivo rojo
Redpack Pack = New Redpack (NULL // La primera vez está vacía, RedPackUtil.CreateBillno () // Número de pedido de comerciante, "Su propio número de comerciante", "Appid de la cuenta oficial", "Nombre", "OpenId del usuario para ser enviado", "El monto de envío es por ejemplo 100, que es RMB 1", "solo puede ser 1" "," 9 "," "127.0.0.0.1", ", es por ejemplo 100, que es RMB 1", "solo puede ser 1" "," 9 "," "127.0.0.0.1", ",", ",", ",", ",", ",", ",". nombre "," nota "," cadena aleatoria ");
Excepto para el inicio de la prueba, está vacío. Todo lo demás se puede llenar. Ahora generamos una firma de signo; Genere un signo de acuerdo con los parámetros en el objeto Pack;
Algoritmo de firma específico https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3 Dirección dada por el sitio web oficial
https://pay.weixin.qq.com/wiki/tools/signverify/ Puede compararlo en esta página de prueba para ver si el cifrado es consistente.
Letreros de cadena = firma.getSign (paquete); // El letrero generado está empaquetado en el objeto de paquete.setsign (señales); // Convertir el objeto a formato xml weChat requiere una cadena de formato xml xml = xmlutil.objtoxml (paquete, redpack.class, "xml");
4. Enviar paquetes rojos
RedPackService Service = new RedPACService (); String result = servicio.redpackorder (xml); // ¿Los datos devueltos por la solicitud exitosa?
Class public RedPackService {/*** Dirección de interfaz de paquete rojo*/String static final privada redp_order_path = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendedpack"; / *** Packet rojo* Certificado requerido* @param Paramxml* @return*/ public static string redpackorder (string paramxml) {try {wxBasesService Service = new WxBasesService (REDP_ORDER_PATH); devolver servicio.sendPost (paramxml); } catch (excepción e) {log.error (e.ToString ()); } return null; }} / ** * Vaya a API Publicar datos XML a través de https * * @param URL Dirección API * @param xmlobj xml Objeto de datos para enviar * @return api devuelve los datos reales del paquete * @throws ioexception * @throws keyStoreException * @throws nocreablekeyException * @throws nosuchalgorithmExceptación * @throwsStoreException * @throws @throws SendPost (String URL, String PostDataxMl) lanza IOException, KeyStoreException, UnrecroverableKeyException, NosuchalgorithMexxception, KeyManagementException {if (! Hasinit) {init (); } Result de cadena = nulo; Httppost httppost = new httppost (url); // Resuelve el error de los subrayadores dobles para xstream // xstream xstreamforRequestPostData = new XStream (new DomDriver ("UTF-8", new XmlFriendlynamEcoder ("-_", "_"))); // Convierta el objeto de datos para enviar a la API en el formato XML Post en la API // String postdataxml = xstreamForRequestPostData.Toxml (XMLOBJ); Util.log ("API, los datos pasados de Post son:"); Util.log (postdataxml); // debe indicar que se utiliza la codificación UTF-8, de lo contrario, el texto chino al servidor API XML no puede identificarse con éxito StringEntity PostEntity = New StringEntity (postdataxml, "UTF-8"); httppost.addHeader ("Content-type", "Text/xml"); httppost.setEntity (postentidad); // Establecer la configuración del solicitante httppost.setConfig (requestConfig); Util.log ("Ejecutando solicitud" + httppost.getRequestline ()); intente {httpResponse respuesta = httpclient.execute (httppost); Httpentity entity = respuesta.getEntity (); resultado = entityUtils.ToString (entidad, "UTF-8"); } Catch (ConnectionPoolTimeOutException e) {log.e ("http get throw ConnectionPoolTimeOutException (Wait Time Out)"); } Catch (ConnectTimeOutException e) {log.e ("http get throw ConnecttimeOutException"); } Catch (SocketTimeOutException e) {log.e ("http get throw socketttimeutexception"); } catch (excepción e) {log.e ("http get excepción de lanzamiento de lanzamiento"); } finalmente {httppost.abort (); } resultado de retorno; } 5. El XML devuelto es exitoso. Dado que solo recargó 1 yuan, ha sido probado y enviado hace unos días. Entonces se devuelve la siguiente información.
<xml> <surne_code> <! [CDATA [Success]]> </return_code> <surne_msg> <! [CDATA [el saldo de la cuenta es insuficiente, recarga en la plataforma comercial e intente nuevamente]]> </shurn_msg> <resultado_code> <! [Cdata [fail]]> </ resultado_code> <rig_code> <! [Cdata [notoNough]]> </ec_code> <rig_code_des> <! [CDATA [el balance de la cuenta es insuficiente, por favor, vuelva a hacer una región en la plataforma de comerciante y vuelva _billno> <! [CDATA [1371729102201629220149762756]]> </mch_billno> <mch_id> <! [Cdata [esta es el número de comerciante eliminado para confidencialidad]]> </mch_id> <wxappid> <! [CDATA [WECHAT OFICIAL appid]]> </wxappid> <RE_openid> <! [CDATA [OD5QQW8E_LBIAW9SZZUD-2XHTMVX Este es el OpenID]]]> </RE_OPENID> <Potal_amount> 100 </Total_amount> </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.