이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 16619|회답: 0

[인터페이스] C#이 위챗 결제 기능을 구현합니다

[링크 복사]
게시됨 2019. 3. 15. 오전 11:59:31 | | |

최근에 위챗 공식 계정 개발을 하다가 위챗 결제 문제로 3일 동안 혼란스러웠는데, 오늘 드디어 끝냈습니다. 이 기간 동안 저는 위대한 신들에게 감사드리며, 그들이 더울 때 제 경험을 나누고자 합니다.

WeChat Pay를 도입하기 전에,

인증을 위해 위챗 개발 플랫폼에 접속해야 하는데, 이 인증 및 설정 정보에 대해서는 많이 말하지 않겠습니다. 주로 코드 수준에서 결제를 실현하는 내용입니다.

공식 문서: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7.

JS에서 여러 매개변수를 고려하여 주요 설명을 하겠습니다:


개발 과정에서 네 가지 매우 중요한 매개변수가 있습니다: appid, AppSecret, apikey, 그리고 merchant number입니다. 위의 js 앱ID가 그 중 하나입니다. timeStamp는 10자리 시간표이고, nonceStr은 32비트 이내의 난수 수이며, 여기서 가장 중요한 두 가지 매개변수이자 가장 오류가 발생하기 쉬운 매개변수는 패키지와 페이사인입니다. 하나씩 말씀드리겠습니다. 먼저 패키지에 대해 이야기해 봅시다. 여기서 prepay_id 매개변수를 사용해야 합니다. 이 매개변수는 WeChat이 생성한 주문 번호입니다. 이를 얻기 위해 통합 주문 인터페이스를 호출해야 합니다. 공식 문서: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. 문서를 보시다시피, prepay_id을 얻기 위해서는 많은 매개변수가 필요하며, 그중 가장 중요한 매개변수 중 하나가 서명입니다. 참고: 여기서의 서명은 JS의 결제 서명과 다릅니다. 서명된 알고리즘 문서에는 두 가지 포인트가 있으며, 저는 두 가지를 강조합니다. 하나는 매개변수의 순서로, ASCII에 따라 작은 순서에서 큰 매개변수로 스플라이싱되어야 하고, 다른 하나는 apikey가 틀리지 않아야 한다는 점입니다. 이 apikey는 어디에 있나요? 가맹점 플랫폼에 로그인해서 설정하세요.

서명에 필요한 문자열을 스플라이어싱한 후, MD5 암호화를 사용해 서명을 얻을 수 있습니다. 그 다음 서명과 이전 모든 매개변수를 XML 형식 문자열로 결합하고, 인터페이스 URL 주소를 호출합니다:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。
JS의 마지막 매개변수인 PaySign에 대해 이야기해 봅시다: PaySign. 결제 서명 알고리즘도 마찬가지로, JS에서 나머지 5개 매개변수를 순서대로 스플라이어스하고, apikey, MD5 암호화도 합칩니다.
서명 알고리즘은 동일하지만 매개변수 값이 다릅니다. 한 가지 주목할 점이 있습니다. 서명 비용을 지불할 때는 난수 nonceStr과 타임스탬프 타임스탬프를 사용하며, 이 두 매개변수는 서명 시 사용됩니다
JS에서 이 두 매개변수의 값이 같으면 같은 난수와 같은 타임스탬프가 됩니다. 왜? 문서에는 명시되어 있지 않지만, 제 이해로는 결제 서명은 무작위 숫자와 타임스탬프로 생성됩니다.
결제할 때는 무작위 번호, 타임스탬프, 결제 서명을 함께 보내고, 위챗이 검증할 때도 JS의 무작위 번호와 타임스탬프를 기반으로 서명을 생성하고 보낸 결제 서명과 비교합니다.
새로운 무작위 숫자와 타임스탬프를 js로 다시 받으면, 계산된 서명이 보낸 서명과 달라지고, 오류가 보고됩니다: 서명 실패.

코드 레벨은 여기까지이며, 물론 몇 가지 다른 점들도 있습니다. 예를 들어, 유용한 openid 매개변수는 인터페이스를 호출하여 얻어야 하며, 결제 승인 디렉터리가 올바르게 구성되어 있는지 확인해야 합니다.
마지막 문장 요약: 문서를 꼼꼼히 살펴보고 마지막으로 다른 사람들에게 물어보세요. 위챗 결제 관련 그룹을 찾을 수 있습니다. 그 안에는 많은 신들이 있습니다. 저도 전에 문제를 겪었고 2일 동안 해결하지 못한 적이 있습니다. (때로는 문서만 보는 것만으로는 부족할 때가 있습니다.)
그 후 그는 화가 나서 8개의 위챗 개발 그룹을 추가했고, 결국 전문가들의 지도 아래 나왔다. 다시 한 번 감사드립니다. 프로그래머는 공유를 좋아하는 사람들이며, 자신이 아는 것을 기꺼이 나누는 사람들입니다. 그러니 이해가 안 될 때는 더 물어보세요.






이전의:C# 위챗 인터페이스의 푸시 템플릿 메시지 기능 예시
다음:대기업의 고객 서비스 시스템에 대해 공감합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com