成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP驗(yàn)證IOS原生支付是否成功(代碼全篇)

fuyi501 / 1916人閱讀

摘要:前言原生支付后需要調(diào)用服務(wù)端接口進(jìn)行驗(yàn)證檢測是否真正的支付成功環(huán)境配置建議提成配置參數(shù)錯(cuò)誤操作成功支付驗(yàn)證蘋果支付認(rèn)證的憑證后的數(shù)據(jù)環(huán)境配置沙箱地址真實(shí)運(yùn)營地址數(shù)據(jù)組裝日志記錄操作這兩行一定要加,不加會報(bào)錯(cuò)誤請求有錯(cuò)誤數(shù)據(jù)錯(cuò)

前言
IOS原生支付后,需要調(diào)用服務(wù)端接口進(jìn)行驗(yàn)證,檢測是否真正的支付成功!

 $code ,
            "message" => $msg ,
            "data" => $data ,
        ] ;
        return json_encode($result,true);
    }

    /** code400
     * @param string $msg
     * @return string
     */
    private function code400( $msg = "參數(shù)錯(cuò)誤!" )
    {
        return $this->jsonRet(400,$msg);
    }

    /** code200
     * @param string $msg
     * @return string
     */
    private function code200( $msg = "操作成功!")
    {
        return $this->jsonRet(200,$msg);
    }

    /** log
     * @param $info
     */
    private function log($info)
    {
        //log info
    }

    /** ios apple 支付驗(yàn)證
     * @return string
     */
    public function apple()
    {
        //蘋果支付認(rèn)證的憑證(base64后的數(shù)據(jù))
        $receipt = $_POST("receipt") ;
        if(empty($receipt)) {
            return $this->code400() ;
        }
        //環(huán)境配置
        if($this->sandbox) {
            $endpoint = "https://sandbox.itunes.apple.com/verifyReceipt";//沙箱地址
        } else {
            $endpoint = "https://buy.itunes.apple.com/verifyReceipt";//真實(shí)運(yùn)營地址
        }
        //數(shù)據(jù)組裝
        //$receipt ="MIITg45+CLLy37vkb0ADflcoqEY/3mH1Rc9rC4q3/O7eG/sT7MntcVH1gc8GiEuZZ1T0Qormu2TFRrg866YxxI0LVfxzQ==";
        $postData = json_encode(
            array("receipt-data" => $receipt)
            ,JSON_UNESCAPED_SLASHES);
        //日志記錄
        $this->log($postData);
        //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);  //這兩行一定要加,不加會報(bào)SSL 錯(cuò)誤
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $response = curl_exec($ch);
        $errno    = curl_errno($ch);
        curl_close($ch);
        if ($errno != 0) {
            return $this->code400("curl請求有錯(cuò)誤!") ;
        } else {
            $data = json_decode($response, true);
            if (!is_array($data)) {
                return $this->code400("數(shù)據(jù)錯(cuò)誤!") ;
            }
            //判斷購買是否成功
            if (!isset($data["status"]) || $data["status"] != 0) {
                return $this->code400("無效的iOS支付數(shù)據(jù)!") ;
            }
            //無效的bundle_id
            if(!in_array($data["receipt"]["bundle_id"],["ios申請的bundle_id類似于支付的app_id"])) {
                return $this->code400("無效的bundle_id:".$data["receipt"]["bundle_id"]) ;
            }
            //多物品購買時(shí)
            // in_app為多個(gè)(坑)
            // ios一次支付可能返回多個(gè),可能是上次成功后沒有及時(shí)返回,這次成功后會把上次或上上次成功的返回
            if(!empty($inAppData = $data["receipt"]["in_app"])) {
                //產(chǎn)品配置,對應(yīng)ios申請的product_id eg : yw_6 支付6元
                $productB = ["yw_6"];
                //多物品信息
                foreach ($inAppData as $product) {
                    //訂單重復(fù)驗(yàn)證
                    $appleData = $product->check("自身業(yè)務(wù)去重");
                    if($appleData) {
                        continue ;
                        //return $this->code400("交易單號重復(fù),請不要重復(fù)驗(yàn)證!id:".$transactionId) ;
                    }
                    if(isset($productB[$product["product_id"]])) {
                        $productId = $product["product_id"];
                        $money = $productB[$productId] ;
                        if(!$money) {
                            return $this->code400("沒有找到對應(yīng)產(chǎn)品的金額,ID:".$product["product_id"]) ;
                        }
                        //業(yè)務(wù)邏輯處理
                        //加余額,記錄資金日志之類的操作
                        $product["add_balance"] = true ;
                    }
                    //環(huán)境
                    $product["is_sandbox"]   = $this->sandbox ;
                    //數(shù)據(jù)
                    $product["receipt_data"]  = $receipt ;
                    //時(shí)間
                    $product["time"]         = date("YmdHis") ;
                    //返回碼
                    $product["err_no"]       = "200" ;
                    //save $product 保存數(shù)據(jù)
                }
            }
            //根據(jù)自身需求返回?cái)?shù)據(jù)
            $returnData = [] ;
            return $this->code200($returnData) ;
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31035.html

相關(guān)文章

  • 2016年終工作總結(jié)

    摘要:由于初版需求及開發(fā)工作都沒有參與,在接手項(xiàng)目后過了遍前端結(jié)構(gòu)發(fā)現(xiàn)所有交互及組件都是現(xiàn)擼,并未使用市面上已有的優(yōu)秀前端框架從我個(gè)人角度理解上出發(fā),后續(xù)需求變更中當(dāng)需要實(shí)現(xiàn)某些常用組件樣式或交互時(shí),基本上都需要現(xiàn)擼或者尋找合適的組件。 2016悄無聲息的過去了,再過不久便是農(nóng)歷新年 這幾天相對清閑梳理了一下去年所做的工作,希望在新的一年能發(fā)展的更好 今年一共研發(fā)或升級了五款產(chǎn)品:合伙人、奪...

    hoohack 評論0 收藏0
  • 寫給想做前端的你

    摘要:不過細(xì)想想,我郵只有前端的選修課啥的,課程也不是那么就業(yè)導(dǎo)向。至少目前,很少有大公司完全把作為前后端通用的技術(shù)棧。不能把簡單看做是在服務(wù)端的延展。編譯這個(gè)思想在前端領(lǐng)域很重要不改變現(xiàn)有的語言環(huán)境同時(shí)進(jìn)行最佳的工程實(shí)踐。 P.S. 噴神請繞道,大神勿噴,不引戰(zhàn),不攻擊,不鉆牛角尖。 大二時(shí)第一次接觸前端。許多同學(xué)估計(jì)都想過要做一個(gè)網(wǎng)站,大部分又是從PHP開始的(誰讓它是世界上最好的語言呢...

    JerryWangSAP 評論0 收藏0
  • 淺析微信支付:微信支付簡單介紹(小程序、公眾號、App、H5)

    摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機(jī)完成快速的支付流程。目前微信支付支持手機(jī)系統(tǒng)有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...

    shadowbook 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<