O uso de envelopes vermelhos do WeChat já é muito amplo. Este artigo apresenta exemplos de envio de envelopes vermelhos no WeChat. Você precisa de uma conta pública certificada e pode abrir a plataforma de pagamento e comerciante do WeChat e permitir permissões de envelope vermelho em dinheiro.
https://pay.weixin.qq.com Endereço de login do comerciante. Escolha ver os pacotes vermelhos em dinheiro no centro de marketing
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1 Documento oficial do site Descrição dos envelopes vermelhos em dinheiro
Vejamos alguns testes simples primeiro. A premissa é que você precisa recarregar primeiro na plataforma de comerciantes. O pré -pagamento não é suportado. Este artigo resume apenas as chamadas e a implementação da interface do envelope vermelha do WeChat Cash. Especificamente, você precisa implementar como chamar essa interface com base em seu próprio negócio.
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3 Existem todas as explicações para envelopes vermelhos comuns no documento. A chamada deve ter um certificado da plataforma de comerciantes.
Os parâmetros necessários também estão listados. Decida de acordo com suas necessidades.
1.Java encapsular um objeto de envelope vermelho
/*** Objeto de envelope vermelho* @Author Xiao shuai shuai* @date 2016-8-17 11:12:19* @Open Source China http://my.oschina.net/xshuai*/classe pública Redpack implementa serializable {private string sign; // Verificação gerada com base nos atributos Private String mch_billno; // Número do pedido Private String mch_id; // Número do comerciante Private String WXAPPID; // WeChat Appid Private String send_name; // Nome do comerciante Private String re_openid; // User OpenId Private String total_amount; // Valor do pagamento String privada total_num; // O número de string do envelope Red ENVELOPE/RETRILTUSTUENO/RETRILTETURATE DE FORNOPETION/STRIRT DONEME;//PROTTROT STRIRT O PROTTER DO PROTTER DO PROTTRATION O PROTTER DO PROTTRATION O PROTTER DO PROTTER DE PROTTRAST; String privada nonce_str; // string aleatória // definido é omitido} 2. A classe de ferramenta necessária CreateBillno é gerar o número da ordem do comerciante. Os requisitos oficiais do documento do site são os seguintes:
/** * Red envelope tool class* @author Xiao Shuai Shuai* @date 2016-8-17 11:12:19 am * @Open Source China http://my.oschina.net/xshuai */public class RedPackUtil { /** * Generate merchant order number* @param mch_id Merchant number* @param userId userID of this user * @return */ public static String createBillNo(){ //Composition: mch_id+yyyymmdd+10-digit numbers that cannot be repeated within one day//10-digit numbers that cannot be repeated within one day are as follows: //Because each user is bound to userId, their userId is different, plus the randomly generated (10-length(userId)) can ensure that these 10 digits are different Date dt=new Date(); SimpledateFormat df = new SimpleDateFormat ("yyyymmdd"); String nowime = df.format (dt); Int comprimento = 10; retornar wxConstants.MCH_ID + NOWTIME + GETRANDOMNUM (Length); } / ** * Gere números aleatórios com dígitos específicos * @param comprimento * @return * / public static string getrandomnum (int length) {string val = ""; Aleatório aleatório = novo aleatório (); for (int i = 0; i <comprimento; i ++) {val+= string.valueof (aleatoriamente.nextInt (10)); } retornar val; }} 3. O trabalho anterior é muito simples e requer um certificado e número de comerciantes. E se a plataforma do comerciante tiver um valor, você poderá testar a interface do envelope vermelho em dinheiro
Redpack pack = new Redpack (nulo // A primeira vez está vazio, Redpackutil.createBillno () // Número do pedido do comerciante, "seu próprio número de comerciante", "Appid da conta oficial", "Nome", "OpenId do Usuário" pode ser enviado ", apenas a unidade de envio é, por exemplo," que é RMB 1 "", "pode ser enviado", "a unidade de envio é, por exemplo, 100, que é RMB 1" "," pode ser enviada "," a unidade de envio é, por exemplo, "que é RMB 1" "," pode ser enviada "," apenas a unidade de envio é, por exemplo, "que é RMB 1" "," pode ser enviada "", "apenas a unidade de envio". nome "," nota "," string aleatória ");
Exceto pela assinatura no teste, ele está vazio. Todo o resto pode ser preenchido. Agora geramos uma assinatura de sinal; gerar um sinal de acordo com os parâmetros no objeto Pack;
Algoritmo de assinatura específica https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3 Endereço fornecido pelo site oficial
https://pay.weixin.qq.com/wiki/tools/signverify/ Você pode compará -lo nesta página de teste para ver se a criptografia é consistente.
String signs = signature.getSign (pack); // o conjunto de sinais gerado é embalado no objeto pack.SetSign (sinais); // converte o objeto para o formato xml weChat requer formato xml string xml = xmlutil.objtoxml (packpack.class, "xml");
4. Envie pacotes vermelhos
Serviço de RedpackService = new RedpacService (); String result = Service.redPackOrder (XML); // Os dados retornados pela solicitação são bem -sucedidos?
classe pública RedPackService {/*** Endereço da interface do pacote vermelho*/String estática final privada Redp_order_Path = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; / *** Pacote vermelho* Certificado necessário* @param paramxml* @return*/ public static string redpackorder (string paramxml) {try {wxBaseService Service = new WxBaseService (redp_order_path); return Service.sendPost (paramxml); } catch (Exceção e) {log.error (e.toString ()); } retornar nulo; }} / ** * Vá para a API Publique dados XML via https * * @param url API Endereço * @param xmlobj xml objeto de dados para enviar * @return API Retornar os dados reais do pacote * @throws iooxception * @throws keystexception * @THOWSECTKEEXCECTRESS * @THROXCECTIONS * @THOWSEEXCECTIVA * @THOWSECTKYException * @THROWSCECTIONS * @THOWSEEXCECTION * @THOURCHEXCOMEXCEMEXCOMEXCEMEXCETHEXCECTRESS * SendPost (URL da String, String PostDataxml) lança IoException, KeyStoreException, UncoverableKeyException, NosuchalgorithMexception, KeyManagementException {if (! Hasinit) {init (); } String resultado = null; HttpPost httpPost = new httppost (url); // Resolva o bug de subdescores duplos para xstream // xstream xStreamForReQuestPostData = new XStream (new Domdriver ("utf-8", novo xmldlennamecoder ("-_", "_")); // Converta o objeto de dados para enviar à API em Postagem de Dados de Formato XML para a API // String PostDataxml = XStreamForRequestPostData.toxml (xmlobj); Util.log ("API, os dados anteriores do Post é:"); Util.log (postDataxml); // Deve indicar que a codificação UTF-8 é usada, caso contrário, o texto chinês no servidor API XML não pode ser identificado com sucesso stringentity postEntity = new stringentity (PostDataxml, "UTF-8"); httppost.addheader ("content-type", "text/xml"); httppost.setentity (pós -escravidão); // Defina a configuração do solicitante httppost.setConfig (requestconfig); Util.log ("Execução da solicitação" + httppost.getRequestLine ()); tente {httpResponse Response = httpclient.execute (httppost); Entidade httpentity = resposta.getEntity (); resultado = entityutils.ToString (entidade, "UTF-8"); } catch (conexionpoolTimeoutException e) {log.e ("http obtém arremesso ConnectionPoolTimeOutException (aguarde tempo out)"); } Catch (ConnectTimeOutException e) {Log.e ("http obtive arremetes ConnectTimeoutException"); } catch (sockettimeoutException e) {log.e ("http obtive sockettimeoutException"); } catch (Exceção e) {log.e ("http obter exceção de arremesso de arremesso"); } finalmente {httppost.abort (); } resultado de retorno; } 5. O XML retornado é bem -sucedido. Desde que apenas recarregou 1 yuan, foi testado e enviado alguns dias atrás. Portanto, as seguintes informações são retornadas.
<xml> <rort_code> <! [CDATA [success]]> </rort_code> <lorpT_msg> <! [CDATA [O saldo da conta é insuficiente, recarregue na plataforma Merchant e tente novamente]]> </return_msg> <resultado_code> <! [CDATA [FAIL]]> </resultado_code> <rist_code> <! [CDATA [noteNough]]> </err_code> <rr_code_des> <! _billno> <! [CDATA [1371729102201629220149762756]]> </mch_billno> <mch_id> <! [CDATA [este é o número do comerciante excluído para confidencialidade]> </mch_id> <wxappiT> APPID]]> </WXAPPID> <RE_OPENID> <! [CDATA [OD5QQW8E_LBIAW9SZZUD-2XHTMVX Este é o OpenId do usuário]]> </sicultura
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.