과거에는 회사 프로젝트 개발에서 간편결제라고 불리는 알리바바 결제 방식으로 결제를 진행했는데, 아쉽게도 지금은 회사에서 위챗 공식 계정을 개발해서 함정이 가득한 위챗 결제 개발에 발을 들였습니다. . .
비즈니스 프로세스:
이 WeChat 공식 웹사이트에서 매우 자세하게 설명되어 있습니다(포털:).
일반적인 프로세스는 다음과 같습니다. 사용자가 결제 버튼을 클릭합니다.->백엔드 처리(실제로는 결제에 필요한 데이터를 캡슐화하고 prepay_id를 얻은 다음 이를 캡슐화하고 몇 가지 필수 매개변수를 전달한 후 통과합니다. 프론트 데스크로)--> ;프런트 데스크에서 데이터를 수신하고 WeChat의 js를 호출하여 데이터 처리 및 결제 호출-->사용자에게 금액 및 기타 정보를 포함한 비밀번호를 입력하는 인터페이스가 표시됩니다-- >사용자가 비밀번호를 입력하면 결제 성공 페이지가 나타나고 WeChat은 인터페이스에 다시 전화결제 결과를 알려줍니다. (이 부분은 WeChat 자체에서 완료되므로 걱정할 필요가 없습니다. 그것에 대해) --> 시스템 자체 페이지로 돌아갑니다.
개발 단계:
1. 결제 디렉토리 설정
이 공식 문서는 역겹게 작성되었으며 읽은 후 약간 어지러웠습니다. 이해할 수는 없지만 정말 멋진 것 같아요! 포털:
2. 승인된 도메인 이름 설정
이 2단계를 완료하고 나면, 거대한 구덩이가 다가오고 있으니 잠시 쉬어가셔도 됩니다. . .
3. 판매자 서버는 통합 주문 인터페이스를 호출하여 주문을 요청합니다
무슨 일을 하나요? 처음 시작했을 때 혼란스러웠는데, 누가 위챗 결제팀에 전화를 걸어 이해하지 못하는 부분을 추가하지 않고 어떻게 정교함을 보여줄 수 있을까요? . . 이해가 안 되시면 문서를 따라가세요
포털: WeChat 공식에서 매개변수에 대해 자세히 설명했습니다. 오랫동안 읽은 후 필요한 몇 가지 매개변수를 캡슐화한 후 이 인터페이스에 액세스하여 데이터를 얻는 방식으로 요약했습니다. 다음은 일반적으로 사용되는 몇 가지 매개변수입니다. 다른 사람의 소개 세부사항을 직접 복사합니다.
이 부분의 요약은 먼저 데이터를 맵으로 캡슐화한 다음 변환하는 것입니다. 도구를 통해 xml로 변환한 다음(위에서 언급한 도구로 돌아가서 직접 읽어보세요), 게시 요청을 통해 [WeChat 통합 주문 인터페이스]를 요청하면 서명에 문제가 없으면 많은 양의 xml이 반환됩니다. 우리가 원하는 것은 이 매개변수인 prepay_id입니다. 그런 다음 서명을 생성하고 프런트 데스크로 돌아갑니다. 그러면 이 단계가 완료됩니다.
문제 요약(이 과정에서 발생한 문제): 1(중요) appid와 openid가 일치해야 합니다. 즉, 사용자의 openid가 현재 공식 계정의 사용자여야 합니다(저희 공식 계정이 여러 개 있습니다) 아니요, 어쩌면 이 문제가 발생하지 않을 수도 있지만 매우 중요합니다. 첫 번째로 이야기하겠습니다.) 2
<span style="text-decoration: underline; color: #ff0000">第二步,生成签名并返回到前台</span><span style="color: #ff0000">这个过程中一定要注意参数一定要写对了,大小写,是否有空格,我在这上面掉了一个大坑,界面调用支付时一直闪退,注意.<br><br></span>
넷째, H5는 WeChat 결제의 내장 JS를 호출합니다
nonceStr == 어쨌든 지금은 서명과 동일한 임의의 문자열을 사용했습니다. 이론적으로는 사용하지 않더라도 문제가 되지 않습니다.
이 부분은 다음과 같은 세 가지 작은 단계로 구성됩니다
1) 전달된 흐름 정보를 구문 분석하고 재서명을 통해 흐름에 포함된 정보의 정확성을 확인합니다. 이 정보가 WeChat에서 전송되는지 확인하는 것입니다
2) return_code와 result_code가 모두 SUCCESS인 경우 가맹점 자체 비즈니스 로직을 처리합니다. 주문의 결제 상태 및 기타 정보일 뿐입니다.
3) 귀하의 반품 금액을 받았다고 WeChat에 알려주세요. 다시 게시할 필요가 없습니다.
말할 것도 없고 코드만 게시하세요!
public String return_data(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("微信支付请求回调了"); String resXml = ""; Map<String, String> backxml = new HashMap<String, String>(); InputStream inStream;try { inStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息Map<String, String> map = WXPayUtil.xmlToMap(result);if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {if (WXPayUtil.isSignatureValid(map, PayConfigUtil.API_KEY)) { logger.info("微信支付-签名验证成功");// backxml.put("return_code", "SUCCESS");// backxml.put("return_msg", "OK");// String toXml = WXPayUtil.mapToXml(backxml);// response.getWriter().write(toXml);resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";//业务处理开始 //业务处理结束 } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());out.flush();out.close(); } } catch (IOException e) { e.printStackTrace(); }return resXml; }
기억하세요. 셋째, 판매자 서버는 통합 주문 인터페이스를 호출하여 주문을 요청합니다. attach 매개변수에서 비즈니스 데이터를 여기로 가져오는 것이 매우 편리합니다
위 내용은 WeChat 공개 계정 결제 개발(java) 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!