Sin más preámbulos, solo mire el código.
RequestHandler requestHandler = nuevo requestHandler (super.getRequest (), super.getResponse ()); // Obtén token // válido dentro de dos horas y vuelva a realizar token después de dos horas = requestHandler.getToken (); // Actualizar token a la aplicación requestHandler.getTokenReal (); System.out.println ("WeChat Pay Get Token ============================:" +Token); // RequestHandler Initialize SoldHandler.init (); requestHandler.init (appid, appSecret, appKey, asociación, key); Código: el sistema local genera pedidos
// Establecer parámetros de orden de paquete SortedMap <String, String> PackageParams = new Treemap <String, String> (); paqueteparams.put ("bank_type", "wx"); // Tipo de pago PackageParams.put ("Body", "xxxx"); // Descripción del producto PackageParams.put ("Fee_Type", "1"); // bank moneda paqueteparams.put ("input_charset", "UTF-8"); // El conjunto de caracteres PackageParams.put ("notify_url", "http://xxxx.com/xxxx/wxcallback"); // La dirección de notificación aquí se prueba utilizando la dirección de red externa y presta atención a si el puerto 80 está abierto. paqueteparams.put ("out_trade_no", no); // Número de pedido comercial Paquete PARAM.put ("Partner", PartnerRid); // Establecer el número de comerciante paquetes de paquete.put ("spbill_create_ip", super.getRequest (). GetRemoteHost ()); // La IP de la máquina generada por el pedido se refiere al paquete IP del navegador del usuario. // La cantidad total del producto se divide en unidades // establecer los parámetros de pago SortedMap <String, String> SignParams = new Treemap <String, String> (); signparams.put ("appid", appid); SignParams.put ("Non -Cestr", Non -CESTR); SignParams.put ("TraceID", PropertiesUtils.getOrderNo ()); SignParams.put ("TimeStamp", TimeStamp); signparams.put ("paquete", paquete Value); SignParams.put ("AppKey", this.appkey); // Para generar una firma de pago, ¡el valor original de URLEncoder debe usarse para el algoritmo SHA1! String signo = ""; intente {sign = sha1util.createsha1sign (signparams); } catch (Exception e) {E.PrintStackTrace (); } // Agregar parámetros adicionales para firmas no participadas a signparams.put ("sign_method", "sha1"); signparams.put ("app_signature", firmar); // Api payment package ends --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- :" + prepayid); Código: Genere la finalización de pedido rápido prepago
// Genere un orden rápido prepago para completar, regrese a Android, iOS y suelte los parámetros requeridos para WeChat. SortedMap <String, String> PayParams = new Treemap <String, String> (); PayParams.put ("Appid", Appid); PayParams.put ("Non -Cestr", Non -CESTR); payParams.put ("paquete", "firmar = wxpay"); PayParams.put ("PartnerId", PartnerRid); payParams.put ("prepayid", preparar); PayParams.put ("AppKey", this.appkey); // La diferencia aquí es 1000 debido al límite de longitud del parámetro. int time = (int) (System.CurrentTimemillis () / 1000); PayParams.put ("Timestamp", String.ValueOf (Time)); System.out.println ("Timestamp:" + Time); // cadena de firma paySign = ""; intente {paySign = sha1util.createsha1sign (payParams); } catch (Exception e) {E.PrintStackTrace (); } payParams.put ("firmar", paySign); // Los datos de JSON se devuelven al cliente BasicDBobject BackObject = new BasicDBObject (); backObject.put ("appid", appid); backObject.put ("Non -Cestr", PayParams.get ("Non -Cestr")); backObject.put ("paquete", "firmar = wxpay"); backObject.put ("PartnerId", PayParams.get ("PartnerId")); backObject.put ("prepayId", payParams.get ("PrepayId")); backObject.put ("appKey", this.appkey); backObject.put ("timestamp", payParams.get ("timestamp")); backObject.put ("firmar", payParams.get ("firmar")); Cadena backstr = dataObject.ToString (); System.out.println ("Backstr:" + Backstr); regresar de atrás; Hasta ahora, se ha generado el orden de prepago y ha sido devuelto al cliente, esperando que el servidor WeChat lo notifique. La dirección de la notificación es notify_url que genera la orden de prepago.
ResponseHandler ResHandler = New ResponseHandler (solicitud, respuesta); reshandler.setkey (asociación); // Crear objeto de solicitud // requestHandler QueryReq = nuevo requestHandler (solicitud, respuesta); //queryreq.init (); if (reshandler.istenpaysign () == true) {// Número de orden de comerciante String Out_trade_NO = reshandler.getParameter ("out_trade_no"); System.out.println ("out_trade_no:" + out_trade_no); // Número de pedido TenPay String Transaction_id = reshandler.getParameter ("Transaction_id"); System.out.println ("Transaction_id:" + Transaction_id); // Cantidad, en unidades de división String Total_fee = reshandler.getParameter ("Total_fee"); // Si se usa un cupón de descuento, el descuento tiene un valor, Total_fee+descuento = el Total_fee String descuidado de cadena original solicitado = reshandler.getParameter ("descuento"); // Resultado de pago cadena comercial_state = reshandler.getParameter ("comercial_state"); // juzga la firma y el resultado if ("0" .equals (trade_state)) { // --------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- // Envía un mensaje exitoso al sistema TenPay. El sistema TenPay ya no proporcionará notificaciones posteriores después de recibir este resultado reshandler.sendTocft ("éxito"); // devuelve el éxito al servidor WeChat de lo contrario 8 notificaciones en 30 minutos return "éxito"; } else {System.out.println ("Notificar fallido de verificación de firma"); reshandler.sendTocft ("Fail"); respuesta.setcharacterEncoding ("UTF-8"); }} else {System.out.println ("fallado -md5 fallido"); }Lo anterior es el código que Java implementa WeChat Payment Server. Espero que todos lo estudien cuidadosamente para realizar el pago de WeChat.