摘要:前言原生支付后需要調用服務端接口進行驗證檢測是否真正的支付成功環境配置建議提成配置參數錯誤操作成功支付驗證蘋果支付認證的憑證后的數據環境配置沙箱地址真實運營地址數據組裝日志記錄操作這兩行一定要加,不加會報錯誤請求有錯誤數據錯
前言
IOS原生支付后,需要調用服務端接口進行驗證,檢測是否真正的支付成功!
$code , "message" => $msg , "data" => $data , ] ; return json_encode($result,true); } /** code400 * @param string $msg * @return string */ private function code400( $msg = "參數錯誤!" ) { 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() { //蘋果支付認證的憑證(base64后的數據) $receipt = $_POST("receipt") ; if(empty($receipt)) { return $this->code400() ; } //環境配置 if($this->sandbox) { $endpoint = "https://sandbox.itunes.apple.com/verifyReceipt";//沙箱地址 } else { $endpoint = "https://buy.itunes.apple.com/verifyReceipt";//真實運營地址 } //數據組裝 //$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("數據錯誤!") ; } //判斷購買是否成功 if (!isset($data["status"]) || $data["status"] != 0) { return $this->code400("無效的iOS支付數據!") ; } //無效的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"])) { //產品配置,對應ios申請的product_id eg : yw_6 支付6元 $productB = ["yw_6"]; //多物品信息 foreach ($inAppData as $product) { //訂單重復驗證 $appleData = $product->check("自身業務去重"); if($appleData) { continue ; //return $this->code400("交易單號重復,請不要重復驗證!id:".$transactionId) ; } if(isset($productB[$product["product_id"]])) { $productId = $product["product_id"]; $money = $productB[$productId] ; if(!$money) { return $this->code400("沒有找到對應產品的金額,ID:".$product["product_id"]) ; } //業務邏輯處理 //加余額,記錄資金日志之類的操作 $product["add_balance"] = true ; } //環境 $product["is_sandbox"] = $this->sandbox ; //數據 $product["receipt_data"] = $receipt ; //時間 $product["time"] = date("YmdHis") ; //返回碼 $product["err_no"] = "200" ; //save $product 保存數據 } } //根據自身需求返回數據 $returnData = [] ; return $this->code200($returnData) ; } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31035.html
摘要:由于初版需求及開發工作都沒有參與,在接手項目后過了遍前端結構發現所有交互及組件都是現擼,并未使用市面上已有的優秀前端框架從我個人角度理解上出發,后續需求變更中當需要實現某些常用組件樣式或交互時,基本上都需要現擼或者尋找合適的組件。 2016悄無聲息的過去了,再過不久便是農歷新年 這幾天相對清閑梳理了一下去年所做的工作,希望在新的一年能發展的更好 今年一共研發或升級了五款產品:合伙人、奪...
摘要:不過細想想,我郵只有前端的選修課啥的,課程也不是那么就業導向。至少目前,很少有大公司完全把作為前后端通用的技術棧。不能把簡單看做是在服務端的延展。編譯這個思想在前端領域很重要不改變現有的語言環境同時進行最佳的工程實踐。 P.S. 噴神請繞道,大神勿噴,不引戰,不攻擊,不鉆牛角尖。 大二時第一次接觸前端。許多同學估計都想過要做一個網站,大部分又是從PHP開始的(誰讓它是世界上最好的語言呢...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
閱讀 2416·2021-11-11 16:54
閱讀 1219·2021-09-22 15:23
閱讀 3660·2021-09-07 09:59
閱讀 2010·2021-09-02 15:41
閱讀 3295·2021-08-17 10:13
閱讀 3064·2019-08-30 15:53
閱讀 1245·2019-08-30 13:57
閱讀 1217·2019-08-29 15:16