ios内购二次验证安全性问题_苹果IOS内购二次验证返回state为21002的坑

项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题。接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行了base64加密,然后传到我们服务端进行二次验证,确认用户是否购买成功,确认成功后创建自己的订单。然而就是这么简单的转发校验过程,居然一直返回state="21002",网上查了下资料说是"receipt-data域的数据有问题",于是我就和妹子说你传给我的数据不对。好吧,居然数据不对,妹子就在那仔细的检查哪出问题了,最后base64加密算法都换了,还是返回21002。最后妹子得出一个结论,就是你后台代码有问题,然后就一直质疑我你会不会哪里写错了,是不是你json封装有问题啊,你就重新写一个啊。。。就这样,json封装方式换了好几种,receipt拿到后台来进行base64转换,试了N多方法,盯着短短的几十行代码看了无数次,最后还是返回21002。妹子就一直在哪吐槽就是你这里出错了,你会不会啊!!你看网上人家是这样这样写的,你参考下啊!!!我勒个去,网上代码和我这有啥区别,能参考的方案都参考了,就这样一遍顶着妹子鄙视智商的质疑,一边默默地思考和无力的反驳着(就是你传给我的数据有问题)。然后激烈的讨论声音有点大了,这时惊动了在后边的主管,于是发个消息给我,会不会是IOS返回的receip有问题,之前也遇到过IOS传输数据时把“+”变成了空格。这时我仿佛握住了一根救命草,赶紧操作试试

String newReceipt = receipt.replace(" ", "+");

哇,终于验证成功了。。。就这么简简单单的一行代码拯救了我的智商,此时心中那个高兴啊,差点就喜极而泣了。ε=(´ο`*)))唉!这个神坑吖!

附上代码吧

public staticString buyAppVerify(String receipt, String environment) {

String url= null;if(environment.equals("0")) {

url= url_verify; //生产环境

}if (environment.equals("1")) {

url= url_sandbox; //沙盒测试

}try{

SSLContext sc= SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },newjava.security.SecureRandom());

URL console= newURL(url);

HttpsURLConnection conn=(HttpsURLConnection) console.openConnection();

conn.setSSLSocketFactory(sc.getSocketFactory());

conn.setHostnameVerifier(newTrustAnyHostnameVerifier());

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-type", "application/json");

conn.setDoInput(true);

conn.setDoOutput(true);

BufferedOutputStream hurlBufOus= newBufferedOutputStream(

conn.getOutputStream());

String newReceipt= receipt.replace(" ", "+");

String str= String.format("{\"receipt-data\":\"" + newReceipt + "\"}");

hurlBufOus.write(str.getBytes());

hurlBufOus.flush();

InputStream is=conn.getInputStream();

BufferedReader reader= newBufferedReader(newInputStreamReader(is));

String line= null;

StringBuffer sb= newStringBuffer();while ((line = reader.readLine()) != null) {

sb.append(line);

}returnsb.toString();

}catch(Exception ex) {

ex.printStackTrace();

}return null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值