Spring Boot 实现苹果支付同步验证

  • 代码
  • 苹果返回相应状态码

代码

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;/*** @ProjectName yuezhi* @ClassName ApplePay* @Description 苹果支付* @Author Wednesday* @Date 2019/9/19 15:17* @Version 1.0**/
@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;@Autowiredprivate PayTypeService payTypeService;@Autowiredprivate UserOrderService userOrderService;@Autowiredprivate UserPropertyService userPropertyService;private static List<PayType> payTypes = null;/*** 重写X509TrustManager*/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 {}};/*** 接收iOS端发过来的购买凭证** @param receipt 苹果的receipt*/@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;}// 设置SSLContextSSLContext 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;}
}

苹果返回相应状态码

 /*** 苹果支付检验返回状态码 描述* 21000 App Store无法读取你提供的JSON数据* 21002 收据数据不符合格式* 21003 收据无法被验证* 21004 你提供的共享密钥和账户的共享密钥不一致* 21005 收据服务器当前不可用* 21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中* 21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证* 21008 收据信息是产品环境中使用,但却被发送到测试环境中验证*/

Spring Boot 实现苹果支付同步验证相关推荐

  1. Spring Boot使用支付宝支付

    一.准备工作 我们先做测试版本的,线上的需要注册商家账号 注册地址 https://openhome.alipay.com/platform/appDaily.htm?tab=info 在这里登上自己 ...

  2. api分层内部外部 spring_java - Spring boot restful API分层架构验证 - SO中文参考 - www.soinside.com...

    [今天,我与我们的一位团队成员就Controller和Service层中的RESTful API输入的验证进行了大讨论,我觉得这是提出更大论点的糟糕日子.因此,我们有一个具有分层体系结构的spring ...

  3. Spring Boot监听事件同步和异步使用

    废话前言: 代码环境:WIN7+IDEA+JAD1.8+Spring Boot 2.0 首先说一下我为什么使用事件,比如现在创建一个订单但是我创建成功后要给客户发送一条短信和一个邮件提醒,本身没创建订 ...

  4. Spring boot 支付宝网站支付

    做好准备 直接上代码 支付前准备 我选用的是证书 也可以用秘钥 自己把证书转换成秘钥就可以了 jar <dependency><groupId>com.alipay.sdk&l ...

  5. Spring Boot版微信支付教程(视频 源码笔记)

    最近有读者让我找点 [微信支付,视频课程]已将帮忙找到了,这次免费分享出来,也希望大家不要嫌弃! 70讲:SpringBoot项目的在线微信支付实战 核心模块: 接入指引,支付安全,创建项目,实战下单 ...

  6. Spring Boot 学习之表单验证

    比如电话号码够不够长,邮箱格式是否正确~我们来看看springboot为我们提供了什么样的便利 首先我们看看我们之间的实体类ManInfo,我现在在里面添加了 @NotEmpty.@Min等注解, m ...

  7. Java spring boot 实现支付宝支付

    基本代码参考自:https://blog.csdn.net/fengxueliuke/article/details/106585809 注意事项: 1.支付宝返回的二维码不能直接在浏览器中打开,而要 ...

  8. Spring Boot集成支付宝电脑网站支付功能

    Spring Boot集成支付宝电脑网站支付功能 接入准备 登录 创建应用 添加能力 生成私钥与公钥 开发设置 沙箱环境 示例Demo的使用与学习 下载Demo 启动项目 参数配置 执行测试 Spri ...

  9. Payment Spring Boot 1.0.2.RELEASE 发布,接入微信支付分、先享卡功能

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 演示例子:https ...

最新文章

  1. CodeForces - 743B Chloe and the sequence
  2. Pycharm打包生成exe可执行文件
  3. jsp自定义alert
  4. KnowledgeGraph Slides项目(CCKS系列报告2013-2018)
  5. 通过Java反射来理解泛型的本质
  6. jquery 弹出遮罩层
  7. 进程/线程间通信和同步
  8. es分页方式search_after
  9. [Java] lomboz开发插件 (对于J2EE)
  10. 好的示波器可以显示正常的方波,自己制作示波器只有正弦波
  11. rest assured
  12. 【P3369 普通平衡树】 Splay
  13. 小计一次监听器的报错之--ORA-12170
  14. 推荐一款美观的开源社区系统
  15. java 1603,win10系统安装软件提示功能传送错误1603的处理方法
  16. 讲解NRF24L01P无线收发模块(转载)
  17. 启示录:TOD分类及用地功能结构组成
  18. 小乌龟提交本地的文件夹下多个项目
  19. 腾讯朋友圈广告的优势有哪些?如何代理腾讯朋友圈广告?
  20. 英语口语练习六之 Where there is..., there is... (哪儿有……哪儿就有……)用法

热门文章

  1. JSOI2014骑士游戏(最短路)
  2. Facebook创始人解释为何不把公司交给职业经理
  3. holder.js占位图片生成器
  4. FastReport浏览器直接打印无须预览(2022终版)
  5. CAD二次开发资料汇总
  6. AI-多模态-文本->图像-2021:Stable Diffusion【开源】【目前开源模型中最强】
  7. 使用计算机打印资料时需要安装打印机驱动,安装打印机驱动时提示确认打印机已连接的问题分析及解决办法...
  8. Qt +百度地图+获取返回位置点
  9. python多点找色找图_[按键精灵教程]带你了解多点找色、多点比色
  10. 详解测多少数据量,几个G,多少reads,如何换算