发新话题
打印

php处理苹果支付接口回调

php处理苹果支付接口回调

苹果支付有2种。

一种是app pay 这个相当于微信,支付宝类似。

一种是appstore内支付。这个就是上架苹果商店(Appstore)的接入方式。

公司开发了一个应用,接入了苹果支付(其实是AppStore内支付,因为是虚拟商品,所有不能直接接入app pay),
客户端做好了,要 PHP程序员 对接支付回调接口,处理支付后的业务逻辑(修改订单状态,发送短信通知客户,修改用户购买的套餐)。

代码:

// 苹果支付验证 接口
// @param string $receipt 收到的数据
// @param boolean $isSandbox 是否是沙盒模式,true,false
// @因为只是写一个demo。所以没有用加密方法。线上的可以用openssl加密传输。不要直接post

    function getreceiptdata(){
        //接受用户的请求。可以改成自己的接受方式。我这里是post请求。$_REQUEST可以接受post,get,cookie等。速度较慢
        $receipt = $_REQUEST['strReceipt'];
        $username = addslashes($_REQUEST['username']);//用户名转义用户名
        $tc = $_REQUEST['pid'];//套餐类型
        $isSandbox = true;
        //如果是沙盒模式,请求苹果测试服务器,反之,请求苹果正式的服务器
        if ($isSandbox) {
            $endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';
        }
        else {
            $endpoint = 'https://buy.itunes.apple.com/verifyReceipt';
        }
    
        $postData = json_encode(
                array('receipt-data' => $receipt)
        );
    
//为了方便演示。所以没有封装curl方法。实际应用中可以把这个单独拿出来。
        $ch = curl_init($endpoint);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  //这两行一定要加,不加会报SSL 错误
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    
    
        $response = curl_exec($ch);
        $errno    = curl_errno($ch);
        $errmsg   = curl_error($ch);
        curl_close($ch);

        $data = json_decode($response);
        
        //判断时候出错,抛出异常
        if ($errno != 0) {
            //throw new \Exception($errmsg, $errno);
            //这里写上自己的逻辑。
        } 
//判断返回的数据是否是对象 
if (!is_object($data)) { 

//无效的响应数据 
    

$order = $data->receipt->in_app;
//所有的订单的信息 
$k = count($order) -1; 
$need = $order[$k];//需要的那个订单 

//下面进行业务处理了,根据用户购买的套餐,给他开通相应的套餐、时间 
//新建一个订单,已支付状态, 
//把购买的套餐的时间加到该账号 


我这里的是客户端(ios)调用我的接口,客户端传用户名,套餐类型,还有苹果发送的数据过来。返回的是xml格式的数据,其实最好是用json返回给客户端,我这里是客户端要求返回xml,代码写的很烂。没有做其他的任何验证,如果你们自己验证的话,一定要验证全面一些。我只是把验证思路贴出来。

苹果的支付回调的接口文档地址我也贴出来方便大家自己去查阅:https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html#//apple_ref/doc/uid/TP40010573-CH1-SW5

TOP

发新话题