代码
package com.yuezhi.controller.pay;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@RestController
@RequestMapping("/pay")
public class ApplePayController {
private static final String certificateUrl = "https://buy.itunes.apple.com/verifyReceipt";
private static final String certificateUrlTest = "https://sandbox.itunes.apple.com/verifyReceipt";
private static Logger logger = LoggerFactory
.getLogger(ApplePayController.class);
@Value("${chooseEnv}")
private Boolean chooseEnv;
@Autowired
private PayTypeService payTypeService;
@Autowired
private UserOrderService userOrderService;
@Autowired
private UserPropertyService userPropertyService;
private static List<PayType> payTypes = null;
private static TrustManager myX509TrustManager = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
};
@RequestMapping("/applePayIap")
public JsonView sendHttpsCoon(String receipt, String test) {
JsonView jsonView = new JsonView();
System.out.println(receipt);
System.out.println(test);
String url = chooseEnv == true ? certificateUrl : certificateUrlTest;
try {
UserRegis userRegis = UserThreadLocal.get();
if (userRegis == null) {
jsonView.setCode(JsonView.TOKEN_TIME_OUT_OR_NULL);
jsonView.setData(0);
jsonView.setMessage("请登录!");
return jsonView;
}
SSLContext ssl = SSLContext.getInstance("SSL");
ssl.init(null, new TrustManager[]{myX509TrustManager}, null);
HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
conn.setSSLSocketFactory(ssl.getSocketFactory());
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-type", "application/json");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
JSONObject obj = new JSONObject();
obj.put("receipt-data", receipt);
BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
buffOutStr.write(obj.toString().getBytes());
buffOutStr.flush();
buffOutStr.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String verifyResult = sb.toString();
conn.getInputStream().close();
logger.error("苹果返回的验证信息--> " + verifyResult);
if (verifyResult == null) {
jsonView.setMessage("苹果验证失败,返回数据为空");
jsonView.setData(1);
jsonView.setCode(JsonView.BALANCE_NULL2);
return jsonView;
} else {
}
return jsonView;
}
}
苹果返回相应状态码