springboot 통합 위 챗 결제 sdk 프로 세 스 분석

머리말
이전에 한 몇 개의 위 챗 애플 릿 프로젝트 는 대부분 고객 들 이 위 챗 애플 릿 전단 지 에서 현금 을 인출 해 야 하 는 수요 가 있다.현금 인출 기능 의 실현 은 자연히 기업 지불 인 터 페 이 스 를 사용 하지만 이 기능 의 개통 은 비교적 번 거 로 우 므 로 만족 시 켜 야 한다세 가지 조건
이전에 몇 개의 위 챗 결제 인 터 페 이 스 를 실 현 했 지만 모두 자신의 코드 입 니 다.인터넷 에서 맞 춤 법 을 찾 아 보 니 불편 합 니 다~ ~그래서 위 챗 이 공식 적 으로 제공 한 지불 을 찾 았 다sdk여 기 는 자바 버 전,springboot 통합 자바 를 사용 합 니 다.
sdk 다운로드,프로젝트 도입
공식 적 으로 제공 하 는 sdk 를 직접 다운로드 한 다음 에 몇 개의 자바 류 를 프로젝트 에 복사 할 수도 있 고 Maven 의존 도 를 직접 도입 할 수도 있 습 니 다.여 기 는 자바 류 를 제 프로젝트 에 직접 복사 하 는 것 입 니 다.

<!-- https://mvnrepository.com/artifact/com.github.wxpay/WXPay-SDK-Java -->
<dependency>
 <groupId>com.github.wxpay</groupId>
 <artifactId>WXPay-SDK-Java</artifactId>
 <version>0.0.4</version>
</dependency>
그림 과 같이 sdk 프로젝트 를 열 면 다음 과 같은 파일 이 있 습 니 다.

config 파일 설정
그것 의 readme 파일 을 통 해 몇 개의 demo 를 볼 수 있 습 니 다.하지만 우선 관련 정 보 를 설정 해 야 합 니 다.자바 클래스 를 새로 만 들 면 원래 의 설정 클래스 를 계승 합 니 다.

package com.github.wxpay.sdk;
import java.io.InputStream;
/**
 * @author Ean
 * @date 2019/7/2
 */
public class MyConfig extends WXPayConfig {
 /**
  *    App ID
  *
  * @return App ID
  */
 @Override
 String getAppID() {
  return "wxdb70c7c6b******";
 }
 /**
  *    Mch ID
  *
  * @return Mch ID
  */
 @Override
 String getMchID() {
  return "1522050000";
 }
 /**
  *    API   
  *
  * @return API  
  */
 @Override
 String getKey() {
  return "xxxxxxxxxxxxxxxx";
 }
 /**
  *         
  *      resources          
  * @return       
  */
 @Override
 InputStream getCertStream() {
  InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");
  return certStream;
 }
 /**
  *   WXPayDomain,            
  *       
  * @return
  */
 @Override
 public IWXPayDomain getWXPayDomain() {
  IWXPayDomain iwxPayDomain = new IWXPayDomain() {
   public void report(String domain, long elapsedTimeMillis, Exception ex) {
   }
   public DomainInfo getDomain(WXPayConfig config) {
    return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);
   }
  };
  return iwxPayDomain;
 }
}
현금 인출 인터페이스 개발
현금 인출 인 터 페 이 스 를 써 서 현금 인출 과 관련 된 인 자 를 입력 하 십시오.

 /**
  *@       
  *@   [param]
  *@    Eangaie
  *@     2019/7/2
  */
 @PostMapping("despot")
 public Result despot(@RequestBody Map<String,Object> param) throws Exception {
  MyConfig config = new MyConfig();
  WXPay wxpay = new WXPay(config,1);
  SortedMap<String, String> sendData;
  sendData=getDespData(param);
  sendData.put("sign", WXPayUtil.generateSignature(sendData,key , WXPayConstants.SignType.MD5));
  Map<String,String> resData=wxpay.despot(sendData,config.getHttpConnectTimeoutMs(),config.getHttpReadTimeoutMs());
  return ResultUtil.success(resData);
 } 
 private SortedMap<String, String> getDespData(Map<String, Object> param) {
  SortedMap<String, String> params = new TreeMap<String, String>();
  String nonce_str=commonUtil.gen32RandomString();
  String partner_trade_no=commonUtil.createNo();
  String openid= String.valueOf(param.get("openid"));
  String check_name="NO_CHECK";
  String amount= String.valueOf(param.get("amount"));
  String desc="    ";
  String spbill_create_ip= String.valueOf(param.get("spbill_create_ip"));
  params.put("mch_appid",mch_appid);
  params.put("mchid",mchid);
  params.put("nonce_str",nonce_str);
  params.put("partner_trade_no",partner_trade_no);
  params.put("openid",openid);
  params.put("check_name",check_name);
  params.put("amount", amount);
  params.put("desc", desc);
  params.put("spbill_create_ip", spbill_create_ip);
  return params;
 }
여기 있 는 일부 변수,예 를 들 어 상점 id,appid 등 은 spring 스 캔 application 설정 파일 을 통 해 자동 으로 주입 되 고 인터페이스 파 라 메 터 는 주로 openid 로 전달 되 며 현금 을 인출 합 니 다.사실 이 spbillcreate_ip 필드 도 고정 할 수 있 습 니 다.
처음에는 개발 이 IP 접근 을 허용 하지 않 는 문제 에 부 딪 혀 왔 다가 결국 발견 됐다.상점 번호 설정 냄비 입 니 다.상점 번 호 는 IP 를 이곳 에 접근 할 수 있 도록 설정 을 닫 는 것 을 기억 하 세 요!아니면 계속 인터페이스 에 접근 할 수 없어 요.
현금 인출 은 성공 적 으로 되 돌 아 왔 지만 프로그램 도 500 을 보고 합 니 다.processResponseXml 이 함수 에 검사 반환 값 이 있 기 때 문 입 니 다.하지만 여기 서 는 사용 할 수 없습니다.코드 를 주석 할 수 있 습 니 다.

 else if (return_code.equals(WXPayConstants.SUCCESS)) {
   return respData;
//   if (this.isResponseSignatureValid(respData)) {
//    return respData;
//   }
//   else {
//    throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr));
//   }
  }
이로써 현금 인출 인터페이스 가 완성 되 었 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기