Eu li o blog sobre o pagamento do WeChat que escrevi hoje em dia, e há algumas pessoas lendo -o. Não sei se é porque o blog não é detalhado o suficiente ou o que está acontecendo. A maioria deles me pede código -fonte. Eu acho que os programadores ainda precisam ter esse processo de pensamento, para que não deram diretamente o código -fonte. Como diz o ditado: "É melhor ensinar as pessoas a pescar do que pescar". Portanto, espero levar algum tempo para tipificar o código enquanto lê o artigo. Ok, não vamos dizer muito absurdo. Desta vez, compartilharei o uso da interface do envelope vermelho do WeChat Cash.
A seguir, é apresentada uma introdução aos envelopes vermelhos em dinheiro pelos documentos de desenvolvimento do WeChat:
Os envelopes vermelhos em dinheiro são uma das ferramentas de marketing fornecidas pela Plataforma do Mercante de Pagamento do WeChat. Desde o seu lançamento, eles foram amados por comerciantes e usuários. Os comerciantes podem distribuir envelopes vermelhos em dinheiro para os usuários de pagamento do WeChat por meio desta plataforma. Depois que o usuário recebe o envelope vermelho, os fundos chegam à conta de alteração de pagamento do usuário do usuário, que possui a mesma exportação de uso que outros fundos na carteira de moedas; Se o usuário não os receber, os fundos serão devolvidos à conta de pagamento do WeChat do comerciante após 24 horas.
Significado do produto
Os envelopes vermelhos em dinheiro do Pagamento do WeChat sempre foram favorecidos pelos usuários devido à maneira como eles carregam fundos em dinheiro. Nos últimos anos, os envelopes vermelhos em dinheiro desempenharam um papel importante; Eles também trouxeram respostas calorosas às atividades de marketing dos comerciantes em operações diárias. Em geral, os envelopes vermelhos em dinheiro desempenham um papel importante em cenários, incluindo, entre outros,:
Em resumo, os envelopes vermelhos do WeChat Cash são uma ferramenta de marketing que pode aumentar a viscosidade do usuário seguindo contas oficiais, registro etc. Desta vez, foco em compartilhar minhas experiências da perspectiva do desenvolvimento do programa
1. Condições necessárias para usar a função do envelope vermelho do WeChat Cash
1. Tenha uma plataforma de comerciante WeChat e certificados secretos completos
2. Os comerciantes precisam ter equilíbrio suficiente para usar (se não for suficientes, você pode usar o TenPay para recarregar a plataforma de comerciante)
3. Fundação de melhor desenvolvimento para o pagamento do WeChat
Os principais pontos e dificuldades do segundo desenvolvimento
1 algoritmo de assinatura do WeChat
2 httppclient e o uso de certificados
3 Leitura de documentos do WeChat (https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)
Se você tiver um pagamento do WeChat H5 ou digitalizar o código QR a pagar, poderá ler esta parte do documento, que é um pedaço de bolo. É fácil entender. Ao mesmo tempo, desde que você domine o conhecimento do httpclient, tudo estará pronto.
Três código direto
public static void sendredPack (string mch_billno, string openId, string send_name, string total_fee, string total_num, string desejando, string act_name, string observação, string ip) lança exceção {string non ClassEdMap <objeto, objeto> p = novo Treemap <object, object> (); p.put ("nonce_str", não); p.put ("mch_billno", mch_billno); p.put ("mch_id", configuil.mch_id); p.put ("wxappid", configuil.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 ("desejando", desejando); p.put ("observação", observação); String signo = payCommonutil.createSign ("utf-8", p); System.out.println (sinal); p.put ("sinal", sinal); String reuqestxml = payCommonutil.getRequestxml (p); Keystore keystore = keystore.getInstance ("pkcs12"); FileInputStream Instruam = new FileInputStream (novo File (Configuil.Cert_Path)); tente {keystore.load (Instream, configuil.mch_id.toCharArray ()); } finalmente {EnterStream.close (); } SslContext sslContext = sslContexts.custom (). Loadkeymaterial (keystore, confgutil.mch_id.toCharArray (). SslConnectionSocketFactory sslsf = novo sslConnectionSocketFactory (sslContext, new String [] {"tlsv1"}, null, sslConnectionSocketFactory.browser_compatible_hostname_verifier); ClosableHttpClient httpClient = httpClients.custom () .SetsSlSocketFactory (sslsf) .build (); tente {httppost httppost = new httppost ("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); // interface de reembolso httppost.addheader ("content-type", "Application/xwl System.out.println ("Execução da solicitação" + httppost.getRequestLine ()); // O XML solicitado deve ser transcodificado para a codificação ISO8859-1, caso contrário, é propenso a erros de assinatura ou texto nos erros de exibição do envelope vermelho reqentity reqentity = new stringentity (new string (reuqestxml.getBytes (), "iso885-1"); // Definir tipo httppost.setentity (reqentity); ClosableHttpResponse Response = httpclient.execute (httppost); tente {httpentity entity = resposta.getEntity (); System.out.println ("--------------------------------------"); System.out.println (Respons.getStatusline ()); if (entidade! = null) {System.out.println ("Resposta Conteúdo Comprimento:" + entity.getContentLength ()); BufferReader buffarredReader = new BufferredReader (new InputStreamReader (entity.getContent (), "UTF-8")); Texto de string; while ((text = bufferredreader.readline ())! = null) {System.out.println (text); }} Entityutils.consume (entidade); } finalmente {Response.Close (); }} finalmente {httpclient.close (); }} Os seguintes pontos a serem observados são:
// O XML solicitado deve ser transcodificado para a codificação ISO8859-1, caso contrário, é propenso a assinar erros ou exibição de texto no envelope vermelho está incorreto.
Stringentity reqentity = new stringentity (new string (reuqestxml.getbytes (), "iso8859-1"));
Pode -se dizer que este lugar quase me caiu e tentou várias depuração. Seria bom adicioná-lo com uma atitude de tentar e ver. Isso pode ser devido à diferença entre httpclient e a sconnection nativa httpp na transmissão de dados. Não há muita pesquisa feita aqui.
Chamar esse método é mais fácil, assim como o seguinte
public static void main (string args []) {try {sendRedPack ("12828839012016101420", "Receptor's OpenId", "XXX", "100", "1", "Reden -envelope por ficar rico," ano novo "," Red ENVELOPE "," Ano Novo ". } Catch (Exceção e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} As informações impressas após o envio do envelope vermelho são as seguintes:
TTP/1.1 200 OK Resposta Conteúdo Comprimento: 567 <XML> <rortL_code> <! [CDATA [success]]> </rr_code> <rist_code_des> <! [CDATA [SUCCESS]> </Err_code> <rist_code_des> <! [CDATA [success]> </err_code> <mch_billno> <! [CDATA [12828839012016101421]]> </mch_billno> <mch_id> <! [CDATA [1282883901]]> </mch_id> <wxappid> <! [Cdata [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]] <Re_openid> <! [CDATA [XXXX]]> </Re_openid> <Total_amount> 100 </ototal_amount> <ndird_listid> <! [CDATA [1000041701201610143000090913093]
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.