ios java服务端_ios 内购买 Java服务器后端实现

流程

后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证

用户进入购买虚拟物品页面,App从后台服务器获取产品列表然后显示给用户

用户点击购买购买某一个虚拟物品,APP就发送该虚拟物品的productionIdentifier到Apple服务器

Apple服务器根据APP发送过来的productionIdentifier返回相应的物品的信息(描述,价格等)

用户点击确认键购买该物品,购买请求发送到Apple服务器

Apple服务器完成购买后,返回用户一个完成购买的凭证

APP发送这个凭证到后台服务器验证

后台服务器把这个凭证发送到Apple验证,Apple返回一个字段给后台服务器表明该凭证是否有效

后台服务器把验证结果在发送到APP,APP根据验证结果做相应的处理

a301fe6cffb87cd64161626369d9a381.png

1.需要一个申请苹果开发者账号

2.绑定银行卡

fc8425a4e438b6819e09452775b1888c.png

25e6f8565d732e36194953e853b59c9a.png

cc57293aa6eb155baea3b615dde019fe.png

设置完成以后

3.建一个沙箱测试号

0174c7cb6f227b5d5817d0572cc85735.png

eb3941432bfc81490e9eb1ba5f2f3659.png

af3ad70fc98ee685005acd052f3bb3bf.png

4bbaa14ee6428fab3497b661c9992c0b.png

175fb848b814e10ae2934a9d2f78955c.png

Java端 服务器二次验证实现,下面是实现代码

public class ApplePey {

public static final ApplePey ME = new ApplePey();

private ApplePey() {

}

//购买凭证验证地址

private static final String VERIFY_ADDRESS = "https://buy.itunes.apple.com/verifyReceipt";

//测试的购买凭证验证地址

private static final String VERIFY_ADDRESS_TEST = "https://sandbox.itunes.apple.com/verifyReceipt";

/**

* 重写X509TrustManager

*/

private static TrustManager myX509TrustManager = new X509TrustManager() {

@Override

public X509Certificate[] getAcceptedIssuers() {

return null;

}

@Override

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

}

@Override

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

}

};

/**

* 接收iOS端发过来的购买凭证

* create time 2016年11月19日 下午5:33:39

*

* @param receipt 收据凭证

* @param address 地址

* @return Str 苹果返回的订单信息

*/

public String iapCertificate(String receipt) {

boolean address = false;

if (StringUtils.isEmpty(receipt)) {

return null;

}

String url = null;

// 获得测试地址

url = address == true ? VERIFY_ADDRESS : VERIFY_ADDRESS_TEST;

final String certificateCode = receipt;

if (StringUtils.isNotEmpty(certificateCode)) {

return sendHttpsCoon(url, certificateCode);

} else {

return null;

}

}

/**

* 发送请求

* create time 2016年11月19日 下午5:32:09

*

* @param url 地址

* @param certificateCode 需要验证订单

* @return Str 订单信息

*/

private String sendHttpsCoon(String url, String certificateCode) {

if (url.isEmpty()) {

return null;

}

try {

// 设置SSLContext

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

// 设置Josn格式

JSONObject obj = new JSONObject();

obj.put("receipt-data", certificateCode);

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 stringBuffer = new StringBuffer();

while ((line = reader.readLine()) != null) {

stringBuffer.append(line);

}

return stringBuffer.toString();

} catch (Exception e) {

return null;

}

}


版权声明:本文为weixin_39709178原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。