国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

fuyi501 / 1903人閱讀

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

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

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

    /** code400
     * @param string $msg
     * @return string
     */
    private function code400( $msg = "參數(shù)錯誤!" )
    {
        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 支付驗證
     * @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ù)據(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);  //這兩行一定要加,不加會報SSL 錯誤
        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請求有錯誤!") ;
        } else {
            $data = json_decode($response, true);
            if (!is_array($data)) {
                return $this->code400("數(shù)據(jù)錯誤!") ;
            }
            //判斷購買是否成功
            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"]) ;
            }
            //多物品購買時
            // in_app為多個(坑)
            // ios一次支付可能返回多個,可能是上次成功后沒有及時返回,這次成功后會把上次或上上次成功的返回
            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ù)驗證
                    $appleData = $product->check("自身業(yè)務(wù)去重");
                    if($appleData) {
                        continue ;
                        //return $this->code400("交易單號重復(fù),請不要重復(fù)驗證!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 ;
                    //時間
                    $product["time"]         = date("YmdHis") ;
                    //返回碼
                    $product["err_no"]       = "200" ;
                    //save $product 保存數(shù)據(jù)
                }
            }
            //根據(jù)自身需求返回數(shù)據(jù)
            $returnData = [] ;
            return $this->code200($returnData) ;
        }
    }
}

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

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

相關(guān)文章

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

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

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

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

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

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

    shadowbook 評論0 收藏0
  • 原生App與javascript交互之JSBridge接口原理、設(shè)計與實現(xiàn)

    摘要:相關(guān)參考中與之間相互調(diào)用的實現(xiàn)實現(xiàn)了與相同的機制的對象注入漏洞解決方案存在的意義 前期調(diào)研 調(diào)研對象:支付寶,微信,云之家 調(diào)研文檔:Android中JS與Java的極簡交互庫 SimpleJavaJsBridge 設(shè)計需求 閱讀類型的業(yè)務(wù)功能頁面需要由前端H5實現(xiàn),需要做到服務(wù)端可控; 頁面界面更改減少重新發(fā)布新版本的頻率; 功能頁面部分原型需求無法實現(xiàn),需要原生功能支持; 對未來...

    Lyux 評論0 收藏0

發(fā)表評論

0條評論

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