php实现apple API内购凭证的验证

前言:苹果的霸道实在是出了名的,因为公司产品是虚拟货币交易,非实物的交易,现在你不给苹果交个过路费,那都是立马被审核处死的节奏。

下面要讲的就是AppStore内购的服务器端验证,在app中支付的过程那是由IOS程序猿完成的,完成支付后前端会获取到相应的支付凭证,那么就需要根据凭证来检验是否真实支付了,进而来完成后续产品的功能的业务逻辑,而校验呢,有两种一种是前端自己去校验,一种是通过后端来校验,可想而知了大部分都会是通过后端来校验了,那么下面就亮出真宝剑:

一、(封装好的获取凭证结构类,这里用的是tp框架,这边若是其他框架修改也很方便,若有不懂可以给我留言)
/**
 * 苹果内购Api查询接口
 * Class AppleAipController
 * @package Pay\Controller
 */
class  AppleAipController extends  Controller
{
   

    /**
     * @var string
     */
    private $sandboxCurl = "https://sandbox.itunes.apple.com/verifyReceipt";
    private $formalityCurl = "https://buy.itunes.apple.com/verifyReceipt";


    /**
     * @return array
     */
    public function send($encodeStr,$sandboxStatus=0)
    {
   
        $ch = curl_init();
        $data['receipt-data'] =$encodeStr;
        $encodeStr =  json_encode($data);
        $url = $sandboxStatus?($this->formalityCurl):($this->sandboxCurl);
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // post数据
        curl_setopt($ch, CURLOPT_POST, 0);
        // post的变量
        curl_setopt(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Java 实现苹果内购凭证校验的代码示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; public class AppleIAPValidator { private static final String SANDBOX_URL = "https://sandbox.itunes.apple.com/verifyReceipt"; // 沙盒环境 private static final String PRODUCTION_URL = "https://buy.itunes.apple.com/verifyReceipt"; // 正式环境 private static final String PASSWORD = "your_shared_secret"; // 共享密钥 public static boolean validateReceipt(String receiptData, boolean isSandbox) throws Exception { String urlString = isSandbox ? SANDBOX_URL : PRODUCTION_URL; URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); String json = "{\"receipt-data\" : \"" + receiptData + "\", \"password\" : \"" + PASSWORD + "\"}"; writer.write(json); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder builder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { builder.append(line); } String response = builder.toString(); System.out.println(response); // 打印校验结果 // 解析校验结果,判断收据是否有效 // 此处代码省略,可以根据返回的 status 判断校验结果 // 如果 status 是 0,则表示验证成功,收据有效;否则收据无效 return true; } public static void main(String[] args) { String receiptData = "your_receipt_data"; // 收据数据,可以从客户端获取 try { String base64ReceiptData = Base64.getEncoder().encodeToString(receiptData.getBytes("UTF-8")); boolean isSandbox = true; // 是否是沙盒环境,根据实际情况设置 validateReceipt(base64ReceiptData, isSandbox); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们定义了一个 `AppleIAPValidator` 类,其中包含了一个 `validateReceipt` 方法,用于校验苹果内购凭证。该方法接受两个参数:`receiptData` 表示收据数据,`isSandbox` 表示是否是沙盒环境。 在方法内部,我们首先根据 `isSandbox` 参数选择要使用的校验地址,然后将收据数据和共享密钥组装成一个 JSON 字符串,并发送 POST 请求到苹果服务器。服务器返回的校验结果是一个 JSON 字符串,我们可以根据其中的 `status` 字段判断收据是否有效。 在 `main` 方法中,我们定义了一个收据数据 `receiptData`,然后将它进行 Base64 编码,并调用 `validateReceipt` 方法进行校验。如果校验结果是有效的,那么方法将返回 `true`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值