public class ApplePayment extends BasePayment {
private static final Logger log = LoggerFactory.getLogger(ApplePayment.class);
/**
* 沙箱url
*/
private final String SAND_BOX_URL = "https://sandbox.itunes.apple.com/verifyReceipt";
/**
* 正式URL
*/
private final String OFFICAL_URL = "https://buy.itunes.apple.com/verifyReceipt";
@Resource
ProducerBean producerBean;
@Autowired
RocketMqConfig rocketMqConfig;
@Override
public PayContext createContext(BaseRequest request) {
return null;
}
@Override
public void preProcess(BaseRequest request, PayContext context) {
}
@Override
public BaseResponse coreProcess(BaseRequest request, PayContext context) {
/**
* 苹果支付只返回订单编号
*/
PaymentRequest req = (PaymentRequest) request;
ApplePayResponse response = new ApplePayResponse();
response.setOrderSn(req.getPaymentSn());
return response;
}
@Override
public void afterProcess() {
}
@Override
public String getPayChannel() {
return PayChannelEnum.APPLE_PAY.name();
}
@Override
public PaymentResponse refund(BaseRequest request) {
return null;
}
@Override
public BaseResponse completePayment(BaseRequest request) {
ApplePayNotifyRequest req = (ApplePayNotifyRequest) request;
String orderSn = req.getOrderSn();
String receiptData = req.getReceiptData();
JSONObject jsonObject = new JSONObject();
//ios会得到一个字节流,然后 base64
//receiptData: 客户端返回的base64
jsonObject.put("receipt-data", receiptData);
String result = HttpClientUtils.httpPost(OFFICAL_URL, jsonObject.toJSONString());
JSONObject res = JSON.parseObject(result);
if ((int) res.get("status") == 21007) {
result = HttpClientUtils.httpPost(SAND_BOX_URL, jsonObject.toJSONString());
res = JSON.parseObject(result);
}
if ((int) res.get("status") != 0) {
throw new BaseException(PayExceptionEnum.APPLE_VERIFY_FAIL);
}
String receiptJson = res.getString("receipt");
JSONObject receipt = JSON.parseObject(receiptJson);
JSONArray array = receipt.getJSONArray("in_app");
String tradeNo ="";
for (int i = 0; i < array.size(); i++) {
JSONObject targetOrder = (JSONObject) array.get(i);
tradeNo = targetOrder.getString("transaction_id");
}
PayNotifyResponse response = new PayNotifyResponse();
//TODO::发送消息执行更新订单相关信息
NotifyOrder notifyOrder = new NotifyOrder();
notifyOrder.setOrderSn(orderSn);
notifyOrder.setTradeNo(tradeNo);
log.info("苹果支付发送消息:[{}]", JSON.toJSONString(notifyOrder));
Message message = new Message(rocketMqConfig.getTopic(), rocketMqConfig.getTag(), "", JSON.toJSONBytes(notifyOrder));
SendResult sendResult = producerBean.send(message);
log.info("苹果支付发送消息成功[{}],[{}]", sendResult.getMessageId(), sendResult.getTopic());
response.setBody("SUCCESS");
return response;
}
}
Springboot之苹果内购支付
最新推荐文章于 2024-11-04 19:54:40 发布