总结整理Apple Pay流程

客户端发起支付---苹果收到支付--通知客户端--成功/失败

客户端成功后调用后端接口处理

主要方法:

/**

*

* @Title: doIosRequest

* @Description:Ios客户端

* @param request //苹果客户端传上来的收据信息

* @param response

* @param receipt 设定文件

* @return void 返回类型

* @throws

*/

@RequestMapping(value="/ios",method = RequestMethod.POST)

public void doIosRequest(HttpServletRequest request, HttpServletResponse response, String receipt) {

String verifyResult = = IosVerify.buyAppVerify(receipt);

if (verifyResult == null) {

// 苹果服务器没有返回验证结果

throw new Exception("无订单信息!");//

} else {

// 苹果验证有返回结果------------------

JSONObject job = JSONObject.parseObject(verifyResult);

String states = job.getString("status");

if (states.equals("0")) // 验证成功

{

String r_receipt = job.getString("receipt");

JSONObject returnJson = JSONObject.parseObject(r_receipt);

if(!returnJson.getString("bid").trim().equals("xxxx")){//商户的id不匹配

throw new Exception("订单无效!");//

}

// 产品ID

String product_id = returnJson.getString("product_id");

// 订单号

String transaction_id = returnJson.getString("transaction_id");

// 交易日期

String purchase_date = returnJson.getString("purchase_date");

// 保存到数据库

System.out.println("product_id:"+product_id+" transaction_id : "+transaction_id+" purchase_date: "+purchase_date+" uid"+user.getId());

/***************************+自己的业务逻辑*****************************************///

/*** 此处要判断是否已经支付过,支付过之后不能重复发货**/

//***************************************/

paymentService.doIosPayment(product_id, transaction_id);

///***************************自己的业务逻辑end************************************///

} else {

throw new ZMServiceException("订单无效!");//

}

}

ResponseUtils.writeSuccessReponse(request, response, "success");

}

请求订单信息

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.List;

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;

/**

* @ClassName: IosVerify

* @Description:Apple Pay

*/

public class IosVerify {

private static class TrustAnyTrustManager implements X509TrustManager {

public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[] {};

}

}

private static class TrustAnyHostnameVerifier implements HostnameVerifier {

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";

/**

* 苹果服务器验证

*

* @param receipt

* 账单

* @url 要验证的地址

* @return null 或返回结果 沙盒 https://sandbox.itunes.apple.com/verifyReceipt

*

*/

public static String buyAppVerify(String receipt,int _o,int _v) {

//环境判断 线上/开发环境用不同的请求链接

String url = EnvUtils.isOnline() ?url_verify : url_sandbox;

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) {

ex.printStackTrace();

}

return null;

}

/**

* 用BASE64加密

*

* @param str

* @return

*/

public static String getBASE64(String str) {

byte[] b = str.getBytes();

String s = null;

if (b != null) {

s = new sun.misc.BASE64Encoder().encode(b);

}

return s;

}

}

java applepay_java后端处理Apple Pay流程相关推荐

  1. java后端处理Apple Pay流程

    总结整理Apple Pay流程 客户端发起支付---苹果收到支付--通知客户端--成功/失败 客户端成功后调用后端接口处理 主要方法: /*** * @Title: doIosRequest * @D ...

  2. 接入Apple Pay流程

    接入Apple Pay流程 最近在做IOS内购的后端事项,所以总结下整个流程,都是参考网上大佬的. 首先我们要搞清楚两个概念:苹果支付(Apple Pay)和IOS内购(IAP) 苹果支付:是一种支付 ...

  3. iOS Apple Pay开发流程

    一:介绍 项目中要用到支付功能,需要支付宝支付.支付宝网页支付.微信支付.银联支付.Apple pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑. 今天我们就主要介绍一下 ...

  4. iOS App集成Apple Pay 编程指南(中国版)

    文章将描述如何在iOS App中开发支持中国用户的Apple Pay,包括前后端的一些处理逻辑如支付信息解密. 关于Apple Pay的一些基本认识和相应API,具体可以参照Apple Pay官方文档 ...

  5. android pay和hce区别,对比Apple Pay与安卓HCE的信令技术

    Apple Pay的发布,让从事安卓NFC应用开发者兴奋了一把,苹果对NFC的支持必将推动整个产业的发展,然而Apple Pay与安卓系统上的NFC支付有什么区别呢?特别是安卓系统上的HCE技术.近日 ...

  6. 苹果内购和 Apple Pay

    作者:CC老师_MissCC 链接:http://www.jianshu.com/p/e3bc47e81785 來源:简书 苹果内购 1.什么是内购? 如果你购买的商品,是在本app中使用和消耗的,就 ...

  7. Apple Pay会不会成为下一个eBay(完结)

    聊Apple Pay完全不是为了什么竞品分析,也不是鸡蛋里挑骨头,更不是带有很强"功利主义"色彩的去"知己知彼,百战不殆",找不足,见缝插针,推己而代之.很简单 ...

  8. Apple Pay及其背后的安全技术

    2019独角兽企业重金招聘Python工程师标准>>> 1.  什么是Apple Pay Apple Pay是Apple公司创新的一种安全支付方式.利用Apple Pay,用户可以在 ...

  9. 银联Apple Pay 总结

    最近在空余的时间做了银联Apple Pay,是银联快捷支付,在手机钱包里面绑定银行卡,在购买商品的时候直接指纹支付就可以了. 首先你看一线Apple Pay的官方文档:Apple Pay Human ...

  10. Java纯后端生成PDF格式报表的三种方案(包含echarts图表)

    最近做了一个奇葩的需求,研究了一下Java纯后端生成PDF报表的方案,顺便将研究的方案做个总结复盘,分享一下. 需求分析:Java后端定时任务统计汇总成报表数据,并生成PDF格式的报表文件,并通过邮件 ...

最新文章

  1. 简介+原理+绘制,详解 Python「瀑布图」的整个制作流程!
  2. javascript this 关键字学习
  3. Linux之文件压缩与打包
  4. ncl 添加点shp文件_基于Arcgis绘制采样点地图
  5. 服务器_Windows Server 2012 服务器之Web服务器
  6. C语言指针的高级操作
  7. 常用评价指标及其Python实现
  8. 几种简易APP制作方式!自留!
  9. 应聘php面试自我介绍,应聘工作面试自我介绍
  10. AlphaGo围棋论文中文翻译
  11. 2017 苹果强制https
  12. 扫码挪车小程序源码专业版上线了
  13. 尚来古籍——江氏族谱
  14. CAD如何绘制多边形的外切圆?
  15. Discuz论坛密码与密保加密规则
  16. 【C++入门基础篇】---- 万字解析
  17. linux系统制作qcow2,centos7.6下qcow2镜像制作方法
  18. CAPL基础篇-----CAPL中如何对系统变量事件响应
  19. ubuntu 修改默认用户名_Ubuntu更改用户名的方法
  20. 前端js下载本地模板

热门文章

  1. Java SE 集合:Map接口
  2. libvlc添加视频录制接口
  3. win10:为U盘设计图标
  4. 反虚拟机、反沙箱技术整理汇总
  5. 代码大全 服装尺寸图html,最全服装尺码对照表
  6. 【AtCoder】AGC007
  7. 准备了个freyja实例项目(单数据源版)
  8. 【AI简报20211203期】国产GPU全面开花!黑芝麻智能与RT-Thread达成战略合作
  9. 分子动力学模拟计算新冠病毒S蛋白和抗体结合自由能
  10. 收款码三合一制作微信小程序源码下载多模板选择