|
Recentemente, eu estava desenvolvendo uma conta oficial no WeChat e tive alguns problemas com o pagamento no WeChat, fiquei confuso por 3 dias, mas hoje finalmente consegui. Durante esse período, gostaria de agradecer a alguns grandes deuses pela ajuda, e vou compartilhar minha experiência com eles enquanto estão quentes. Antes de implementar o WeChat Pay, Preciso acessar a plataforma de desenvolvimento do WeChat para a certificação, não vou falar muito sobre essas informações de autenticação e configuração, aqui é principalmente do nível do código para realizar pagamentos. Documentação oficial: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Diante de vários parâmetros no JS, vou dar uma explicação principal:
Durante o processo de desenvolvimento, existem 4 parâmetros muito importantes: um é appid, AppSecret, apikey e número de comerciante. O appID no js acima é um deles. TimeStamp é um timestamp, 10 dígitos, nonceStr é um número aleatório, dentro de 32 bits, os dois parâmetros mais importantes aqui, e os mais propensos a erros são package e paySign. Deixe-me contar um por um. Vamos falar primeiro sobre o pacote, precisamos usar prepay_id aqui, esse parâmetro é o número do pedido gerado pelo WeChat, precisamos ligar para a interface unificada de pedidos para obtê-lo. Documentação oficial: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Como você pode ver na documentação, para obter prepay_id, muitos parâmetros são necessários, e um dos parâmetros mais importantes é a assinatura. Nota: A assinatura aqui é diferente da assinatura de pagamento no JS. Existem dois pontos no documento do algoritmo assinado, e eu apenas enfatizo dois pontos. Um é a ordem dos parâmetros, que devem ser emendados de acordo com o ASCII de pequeno para grande, e o outro é que o apikey não deve estar errado, onde está esse apikey? Faça login na plataforma de comerciantes para configurá-lo. Após emendar as strings necessárias para a assinatura, a criptografia MD5 pode ser usada para obter a assinatura. Depois, combine a assinatura e todos os parâmetros anteriores em uma string de formato xml e chame o endereço URL da interface:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Vamos falar sobre o último parâmetro no JS, PaySign: PaySign. O mesmo vale para o algoritmo de assinatura de pagamento, que combina os outros 5 parâmetros em JS em ordem, além de apikey, criptografia MD5, ok. O algoritmo de assinatura é o mesmo, mas os valores dos parâmetros são diferentes. Aqui vai uma coisa a se notar. Ao pagar pela assinatura, são usados o número aleatório nonceStr e o timestamp de carimbo de tempo, e esses dois parâmetros são usados ao assinar Se os valores desses dois parâmetros no JS forem iguais, eles são o mesmo número aleatório e o mesmo carimbo de tempo. Por quê? Embora a documentação não diga isso, pelo que entendo, assinaturas de pagamento são geradas por números aleatórios e carimbos de data, Depois, ao pagar, envie o número aleatório, carimbo de tempo e assinatura de pagamento juntos, e quando o WeChat verificar, também será baseado no número aleatório e no carimbo de data no JS para gerar uma assinatura e compará-la com a assinatura de pagamento que você enviou. Se você recuperar o novo número aleatório e o carimbo de data em js, a assinatura calculada será diferente da assinatura que você enviou, e um erro será reportado: assinatura falhada.
Isso é tudo para o nível do código, e claro, há alguns outros pontos a serem notados. Por exemplo, o parâmetro openid útil também precisa ser obtido chamando a interface, e se o diretório de autorização de pagamento está configurado corretamente. Resumo da última frase: Olhe atentamente para o documento e, por fim, pergunte para outras pessoas, você pode encontrar grupos relacionados a pagamentos no WeChat, há muitos deuses nele, já tive um problema antes e lutei por 2 dias sem resolvê-lo (às vezes só olhar o documento não é suficiente), Depois, ele adicionou com raiva 8 grupos de desenvolvimento no WeChat e finalmente saiu sob a orientação dos especialistas. Obrigado novamente. Programadores são um grupo de pessoas que adoram compartilhar, e ficam mais do que felizes em compartilhar o que conhecem. Então, quando você não entender, pergunte mais.
|