摘要:前言原生支付后需要調(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
摘要:由于初版需求及開發(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)品:合伙人、奪...
摘要:不過細(xì)想想,我郵只有前端的選修課啥的,課程也不是那么就業(yè)導(dǎo)向。至少目前,很少有大公司完全把作為前后端通用的技術(shù)棧。不能把簡單看做是在服務(wù)端的延展。編譯這個思想在前端領(lǐng)域很重要不改變現(xiàn)有的語言環(huán)境同時進行最佳的工程實踐。 P.S. 噴神請繞道,大神勿噴,不引戰(zhàn),不攻擊,不鉆牛角尖。 大二時第一次接觸前端。許多同學(xué)估計都想過要做一個網(wǎng)站,大部分又是從PHP開始的(誰讓它是世界上最好的語言呢...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統(tǒng)有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
摘要:相關(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),需要原生功能支持; 對未來...
閱讀 2395·2021-11-11 16:54
閱讀 1204·2021-09-22 15:23
閱讀 3645·2021-09-07 09:59
閱讀 1990·2021-09-02 15:41
閱讀 3283·2021-08-17 10:13
閱讀 3037·2019-08-30 15:53
閱讀 1235·2019-08-30 13:57
閱讀 1210·2019-08-29 15:16