메시지 남기고 전달 환영합니다
이 기사에서는 WeChat 카드 결제에 대해 구체적으로 설명합니다
장면 소개
1단계: 사용자가 카드 결제를 선택하고 WeChat을 열고 "나"->"지갑"->"스와이프 카드" 바코드 인터페이스로 들어갑니다
2단계: 계산원이 가맹점 시스템을 운영하여 결제 주문을 생성하고, 사용자는 결제 금액을 확인합니다.
3단계: 가맹점의 계산원이 사용자의 바코드를 스캔합니다. /QR 코드를 스캐닝하여 판매자가 현금을 수집합니다. 시스템이 결제를 제출합니다
4단계: WeChat 결제 백엔드 시스템이 결제 요청을 수신하고 사용자 결제 확인 여부를 결정합니다. 비밀번호 확인 규칙에 따라 비밀번호를 입력합니다. 비밀번호 확인이 필요하지 않은 거래의 경우 비밀번호 입력 상자가 나타납니다. 결제가 성공한 후 위챗에 성공 페이지가 뜹니다. 결제가 실패하면 오류 메시지가 뜹니다
자세한 문서 소개는 여기를 클릭하세요
카드 결제 액세스 모드는 가맹점 백엔드 액세스(유사한 제3자가 사용하도록 타인에게 제공)와 매장으로 나눌 수 있습니다. 액세스(자체 사용) 区别就是支付结果多分发一次
.
사용자가 결제 비밀번호를 입력해야 하는지 여부에 따라 비밀번호 없는 모드와 비밀번호 확인 모드로 나눌 수 있습니다.
결제 금액이 500위안을 초과하는 거래에는 사용자 결제 비밀번호 확인이 필요합니다
사용자 계정마다 일 최대 5건의 거래가 비밀번호 없이 가능하며 이후에는 비밀번호 확인이 필요합니다
WeChat 결제 배경에서 사용자 결제 동작에 이상이 있다고 판단하고 비밀번호 없는 거래를 준수하는 거래 규칙에도 비밀번호 확인이 필요합니다
비밀번호 없는 모드와 비밀번호 확인 모드의 차이점은 나중에 논의하겠습니다
구체적인 사항에 대해 이야기해 보겠습니다. 구현
신용 카드 결제에 사용되는 결제 인터페이스는 다음과 같습니다. 신용 카드 결제 API를 제출하면 https
요청이 필요하지 않습니다.
구체적인 구현 코드는 다음과 같습니다. com.javen.weixin.controller.WeixinPayController
의 micropay()
public void micropay(){ String url="https://api.mch.weixin.qq.com/pay/micropay"; String total_fee="1"; //授权码 String auth_code = getPara("auth_code"); Map<String, String> params = new HashMap<String, String>(); params.put("appid", appid); params.put("mch_id", partner); params.put("device_info", "javen205");//终端设备号 params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); params.put("body", "刷卡支付测试"); // params.put("detail", "json字符串");//非必须 params.put("attach", "javen205");//附加参数非必须 String out_trade_no=System.currentTimeMillis()+""; params.put("out_trade_no", out_trade_no); params.put("total_fee", total_fee); String ip = IpKit.getRealIp(getRequest()); if (StrKit.isBlank(ip)) { ip = "127.0.0.1"; } params.put("spbill_create_ip", ip); params.put("auth_code", auth_code); String sign = PaymentKit.createSign(params, paternerKey); params.put("sign", sign); String xmlResult = HttpUtils.post(url, PaymentKit.toXml(params)); //同步返回结果 System.out.println("xmlResult:"+xmlResult); Map<String, String> result = PaymentKit.xmlToMap(xmlResult); String return_code = result.get("return_code"); if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) { //通讯失败 String err_code = result.get("err_code"); //用户支付中,需要输入密码 if (err_code.equals("USERPAYING")) { //等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2 } renderText("通讯失败>>"+xmlResult); return; } String result_code = result.get("result_code"); if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) { //支付失败 renderText("支付失败>>"+xmlResult); return; } //支付成功 renderText(xmlResult); }
오픈소스 프로젝트 weixin-guide의 테스트 접속 주소는 http://域名[/项目名称]/pay/micropay?auth_code=xxxxx
, 授权码auth_code
은 WeChat입니다. 클라이언트 카드 스와이프 인터페이스의 바코드에 표시되는 숫자입니다.
(참고: 사용자 카드 스와이프 바코드 규칙: 10, 11, 12, 13, 14, 15로 시작하는 순수 18자리 숫자)
코드 스캐너를 사용하지 않고도 테스트할 수 있지만, 인증코드를 수동으로 입력하는 것이 조금 번거롭고(1분에 한 번씩 새로고침) 빠르게 인증코드를 입력해야 합니다. 코드 스캐너는 인증 코드만 읽고 다른 작업은 수행하지 않습니다.
로컬 포트 매핑 테스트를 위한 주소는 다음과 같습니다.
여기서 auth_code
값은 http://域名/pay/micropay?auth_code=111
브라우저에서 액세스하는
반환 결과는 다음과 같습니다.
<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[您公众号的appid]]></appid> <mch_id><![CDATA[您微信商户号]]></mch_id> <device_info><![CDATA[javen205]]></device_info> <nonce_str><![CDATA[eXgczazQq54pqcyH]]></nonce_str> <sign><![CDATA[FF03DA0E58845CCE1FCC2166EC03FBE5]]></sign> <result_code><![CDATA[FAIL]]></result_code> <err_code><![CDATA[AUTH_CODE_INVALID]]></err_code> <err_code_des><![CDATA[请扫描微信支付被扫条码/二维码]]></err_code_des> </xml>
5회 이상 카드를 긁어 결제하면 비밀번호를 입력하라는 메시지가 표시됩니다
반환된 err_code
은 USERPAYING
이때 결제 결과는 필수입니다. 주문 인터페이스에 문의하여
을 받으세요. 이것이 비밀번호가 있는 경우와 없는 경우의 차이입니다. 비밀번호를 입력하려면
查询订单
을 사용해야 합니다. 결과가 여전히USERPAYING
이면 두 번째 루프 는查询订单API
를 호출하여 사용자가 실제 지불 결과를 확인합니다. 결제를 취소하거나 사용자가 30초 동안 결제하지 않으면 판매자의 계산원 은 쿼리 프로세스를 종료하고撤销订单API
에 계속 전화하여 결제를 취소합니다.
올바른 auth_code
을 입력하면 반환된 결과는 다음과 같습니다.
<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[您公众号的appid]]></appid> <mch_id><![CDATA[您微信商户号]]></mch_id> <device_info><![CDATA[javen205]]></device_info> <nonce_str><![CDATA[Z9p14VPJ822ZTPXP]]></nonce_str> <sign><![CDATA[03BD421A33A5079A1BE6030E2EBA8291]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <openid><![CDATA[o_pncsidC-pRRfCP4zj98h6slREw]]></openid> <is_subscribe><![CDATA[Y]]></is_subscribe> <trade_type><![CDATA[MICROPAY]]></trade_type> <bank_type><![CDATA[CFT]]></bank_type> <total_fee>1</total_fee> <fee_type><![CDATA[CNY]]></fee_type> <transaction_id><![CDATA[4009682001201610156761057959]]></transaction_id> <out_trade_no><![CDATA[1476523316727]]></out_trade_no> <attach><![CDATA[javen205]]></attach> <time_end><![CDATA[20161015172058]]></time_end> <cash_fee>1</cash_fee> </xml>
사용 시나리오 설명
액세스 모드가 다음과 같은 경우 판매자 백엔드 액세스 를 입력하고 결제가 성공하면 WeChat 결제 시스템은 위의
xml
데이터를 판매자에게 반환하고, 판매자는 결제 결과를 매장 계산원에게 콜백하고 계산원은 계속해서 비즈니스 로직 처리액세스 모드 - 매장 액세스 결제에 성공하면 WeChat 결제 시스템은 위의
xml
데이터를 계산원에게 반환하고 계산원은 계속해서 비즈니스 로직 처리
이상으로 위챗카드 상세 소개가 완료되었습니다. 지불.
[관련 추천]
PigCms 마이크로 전자상거래 시스템 운영 버전 (독립 위챗 스토어 + 3단계 유통 시스템)
3. 위챗 투표 소스코드
위 내용은 신용카드 결제를 위한 WeChat 공개 계정 개발에 대한 예제 튜토리얼 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!