다음은 PHP 언어를 예로 들어 WeChat 결제 개발 과정을 설명합니다.
1. 주문 정보 받기
2. 주문 정보 및 결제 관련 계정을 기반으로 사인을 생성하고 결제 매개변수를 생성합니다
3. 결제 매개변수 정보를 WeChat 서버에 게시하고 반품 정보를 받습니다
4. 반환된 정보를 바탕으로 해당 결제 코드(WeChat 내) 또는 결제 QR 코드(WeChat 내 아님)를 생성하여 결제를 완료합니다.
다음은 단계별 설명입니다.
1. WeChat 결제와 관련된 세 가지 필수 주문 매개변수가 있습니다. 즉, body(제품 이름 또는 주문 설명), out_trade_no(일반적으로 주문 번호) 및 total_fee(주문 금액, 단위 "센트", 단위에 주의하세요) ), 다양한 애플리케이션에서 가장 먼저 해야 할 일은 결제 매개변수 생성을 준비하기 위해 관련 정보를 얻는 것입니다.
2. 기타 필수 결제 매개변수에는 appid(WeChat appid), mch_id(신청이 성공한 후 알림), device_info(웹과 WeChat 측의 매개변수가 동일하며 대문자 "WEB"임), trade_type(다음에 따름)이 있습니다. 이 값은 다양한 사용 시나리오에서도 다릅니다. WeChat 외부에서는 "NATIVE"이고 WeChat 내부에서는 "JSAPI"입니다. nonce_str(32비트 임의 문자열), spbill_create_ip(결제를 시작하는 터미널 IP, 즉 서버 IP) ), inform_url(결제 콜백 주소, WeChat 서버에서 결제 완료 여부를 웹사이트에 알리고, 주문 상태를 수정함), 서명(서명), 그리고 trade_type이 JSAPI인 경우 openid를 추가로 설명해야 합니다. 필수 매개변수입니다.
서명 알고리즘은 서명 단계가 번거로워서 오류가 발생하기 쉽습니다. 사실 가장 중요한 것은 서명에 서명이 참여하지 않는다는 것입니다
A: 로그인을 제외하고 1과 2에서 언급한 매개변수를 배열 배열로 할당하고 사전순으로 정렬합니다. 실제로 키 값은 A-Z 순서로 정렬됩니다.
B: 배열을 k1=v1&k2=v2&...kN=vN 형식의 문자열로 변환합니다
C: 이 문자열(WeChat 결제 판매자 백엔드에서 사용자가 설정) 뒤에 KEY 값을 추가합니다. 이제 문자열 = k1=v1&k2=v2&...kN=vN&key=KEY입니다.
D:문자열 = md5(문자열)
E: 부호 = strtoupper(문자열)
이 시점에서 기호가 생성됩니다.
새로운 배열을 생성하려면 배열 배열에 기호를 추가하세요. 이 배열을 XML로 변환합니다. 이로써 위챗 결제를 위한 매개변수 준비 작업이 완료되었습니다.
3. POST를 사용하여 2에서 생성된 XML을 WeChat(https://api.mch.weixin.qq.com/pay/unifiedorder)으로 보내 반환된 XML 정보를 얻고, 쉬운 조작을 위해 정보를 배열 형식으로 변환합니다. 반환되는 XML 정보는 다음과 같습니다.
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx2421b1c4370ec43b]]></appid> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str> <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id> <trade_type><![CDATA[JSAPI]]></trade_type> </xml>
trade_type==native 결제인 경우 WeChat 스캔 코드 결제 주소인 code_url이라는 추가 매개변수가 있습니다.
4. 결제 과정은 다음과 같습니다.
trade_type==native인 경우 몇 가지 방법을 사용하여 code_url을 QR 코드로 변환하고 WeChat을 사용하여 코드를 스캔하면 됩니다. WeChat 내에서 클릭하여 결제하는 경우 관련 항목을 호출해야 합니다. WeChat js-sdk 이 단계 가장 중요한 것은 json 형식의 문자열을 생성하는 것입니다.
먼저 json 문자열을 변환하는 array_jsapi를 생성합니다.
A: 이 배열의 매개변수에는 appId, timeStamp, nonceStr, package, signType이 포함됩니다(기본값은 "MD5"). 위 배열과 경우가 다르다는 점에 유의하세요.
B: 이 배열을 사용하여 paySign 매개변수를 생성합니다. 서명 방법은 위와 동일합니다.
C: array_jsapi 배열에 paySign 매개변수를 추가합니다.
D: json_encode를 사용하여 배열을 js_string 문자열로 형식화합니다.
위 작업 완료 후 위챗 내에서 결제가 가능합니다.
다음은 관련 결제에 대한 샘플 코드입니다.
<script type='text/javascript'> function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', $js_string, function(res){ WeixinJSBridge.log(res.err_msg); if(res.err_msg=='get_brand_wcpay_request:ok') { alert('支付成功'); } else { alert('支付失败'); } } ); } function callpay() { if (typeof WeixinJSBridge == 'undefined'){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } </script>
코드의 js_string은 우리가 생성한 문자열입니다.
결제를 시작하려면 HTML 코드에서 callpay() 함수를 호출하세요.
이렇게 위챗페이 결제작업이 완료되었습니다.
다음은 주문 결제가 성공한 후 사용자에게 올바른 상태를 표시하는 콜백 작업입니다.
결제가 완료된 후 WeChat은 POST 요청을 통해 결제 결과를 웹사이트 서버에 피드백합니다. 웹사이트 서버는 POST 정보를 획득하고 결제 성공 여부에 따라 주문 정보 수정 여부를 결정합니다.
A: POST 매개변수에서 기호를 제거하고 값을 기록합니다.
B: 나머지 매개변수 서명
C: 서명 결과를 POST의 서명과 비교하십시오. 서명이 동일하면 결제 결과에 따라 주문 상태가 수정되었음을 의미합니다.
E: WeChat에 XML 정보를 반환하여 웹사이트가 알림을 수신했음을 WeChat이 알 수 있도록 하고 WeChat이 POST를 다시 푸시하지 못하도록 합니다.
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>
실패한 경우 반품
<xml> <return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[失败原因]]></return_msg> </xml>
이 시점에서 WeChat Payment의 전체 개발 과정이 소개됩니다.