1.先导入该ApplePayUtil工具类
package com.zhangsan.pay.utils;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class ApplePayUtil{
private static class TrustAnyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
public static String buyAppVerify(String receipt, int type) {
String url = "";
if (type == 0) {
url = url_sandbox;
} else {
url = url_verify;
}
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type", "text/json");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setDoInput(true);
conn.setDoOutput(true);
BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");
hurlBufOus.write(str.getBytes());
hurlBufOus.flush();
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception ex) {
System.out.println("苹果服务器异常");
ex.printStackTrace();
}
return null;
}
}
2.编写ApplePayController
package com.zhangsan.pay.controller;
import com.search.basics.pojo.RespBean;
import com.zhangsan.pay.pojo.ApplePayRequest;
import com.zhangsan.pay.service.ApplePayService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api")
public class ApplePayController {
@Resource
private ApplePayService applePayService;
@PostMapping(value = "/pay/applePay")
@ResponseBody
public RespBean applePayOrder(@RequestBody ApplePayRequest applePayRequest) {
return applePayService.applePayOrder(applePayRequest);
}
}
3.编写对应的AppleServiceImpl
此处要根据具体的业务来编写对应的代码
package com.zhangsan.pay.service.impl;
import com.alibaba.fastjson.JSON;
import com.order.feign.OrderFeign;
import com.search.basics.pojo.RespBean;
import com.zhangsan.pay.pojo.ApplePay;
import com.zhangsan.pay.pojo.ApplePayReceipt;
import com.zhangsan.pay.pojo.ApplePayRequest;
import com.zhangsan.pay.service.ApplePayService;
import com.zhangsan.pay.utils.ApplePayUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class ApplePayServiceImpl implements ApplePayService {
@Resource
private OrderFeign orderFeign;
@Override
public RespBean applePayOrder(ApplePayRequest applePayRequest) {
try {
String pay= ApplePayUtil.buyAppVerify(applePayRequest.getTransactionReceipt(), applePayRequest.getType());
if (pay== null) {
RespBean.error("无订单信息");
} else {
ApplePay applePay = JSON.parseObject(pay, ApplePay.class);
if ("21007".equals(applePay.getStatus())) {
pay= ApplePayUtil.buyAppVerify(applePayRequest.getTransactionReceipt(), applePayRequest.getType());
applePay = JSON.parseObject(pay, ApplePay.class);
}
if ("0".equals(applePay.getStatus())) {
ApplePayReceipt receipt = applePay.getReceipt();
if (applePayRequest.getTransactionIdentifier().equals(receipt.getTransaction_id())) {
boolean flag = orderFeign.appleOrderDeal(applePayRequest.getTransactionIdentifier(), receipt.getPurchase_date_ms(), receipt.getProduct_id(), applePayRequest.getUserId());
if (flag) {
return RespBean.ok("操作成功");
} else {
return RespBean.ok("操作失败");
}
}
} else {
return RespBean.error("receipt数据有问题");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return RespBean.ok("验证失败");
}
}
4. 配上ApplePay需要的实体类
public class ApplePay {
private ApplePayReceipt receipt;
private String status;
}
package com.zhangsan.pay.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ApplePayReceipt {
private String transaction_id;
private String in_app_ownership_type;
private String original_transaction_id;
private String quantity;
private String unique_identifier;
private String item_id;
private String is_in_intro_offer_period;
private String purchase_date_pst;
private String original_purchase_date_ms;
private String original_purchase_date_pst;
private String is_trial_period;
private String original_purchase_date;
private String purchase_date_ms;
private String product_id;
private String bvrs;
private String purchase_date;
private String bid;
private String unique_vendor_identifier;
}