日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

ios 支付验证 php,PHP验证IOS原生支付是否成功(代码全篇)

發布時間:2025/3/12 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 支付验证 php,PHP验证IOS原生支付是否成功(代码全篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

IOS原生支付后,需要調用服務端接口進行驗證,檢測是否真正的支付成功!

class ApplePay

{

/** 環境配置(建議提成配置)

* @var bool

*/

private $sandbox = false ;

/** result as json

* @param int $code

* @param string $msg

* @param array $data

* @return string

*/

private function jsonRet(int $code=200, string $msg='', array $data = [])

{

$result = [

'code' => $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) ;

}

}

}

總結

以上是生活随笔為你收集整理的ios 支付验证 php,PHP验证IOS原生支付是否成功(代码全篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。