iOS应用内支付(IAP)php后端验证代码

        $is_sandbox = input('is_sandbox', 0, 'intval');
        $receipt = urlencode($_REQUEST['receipt-data']);
        $receipt = str_replace('%2F','/',$receipt);
        $receipt = str_replace('%5C','',$receipt);
        $receipt = str_replace('%3D','=',$receipt);
        $receipt = str_replace('%2B','+',$receipt);
        if ($is_sandbox == 1) {
            $url = "https://sandbox.itunes.apple.com/verifyReceipt";
        } else {
            $url = "https://buy.itunes.apple.com/verifyReceipt";
        }
        $json = '{"receipt-data":"'.$receipt.'"}';
        $result = $this->http_post_json($url, $json);
        if (isset($result['status']) && $result['status'] == 0 && !empty($result['receipt']['in_app'])) {
            $pay_log_insert = [];
            $time = time();
            foreach ($result['receipt']['in_app'] as $key => $val) {
                $pay_log_insert[] = [
                        'user_id' => $user_id,
                        'order_id' => 0,
                        'title' => $title,
                        'price' => $price,
                        'article_type' => $type,
                        'log_type' => 2,
                        'question_num' => $num,
                        'create_time' => $time,
                        'delete_time' => 0,
                        'receipt_data' => $receipt,
                    ];
            }
            
    private function http_post_json($url, $json)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS,$json);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($json))
        );
        // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // curl_setopt($ch, CURLOPT_POST, 1);
        // curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  //这两行一定要加,不加会报SSL 错误
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $response = curl_exec($ch);
        $errno = curl_errno($ch);
        $errmsg = curl_error($ch);
        curl_close($ch);
        if (!$response) {
            return $errmsg;
        }
        $data = json_decode($response, true);
        return $data;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Unity中实现IOS支付的示例代码: ```csharp using System.Collections.Generic; using UnityEngine; using UnityEngine.Purchasing; using UnityEngine.UI; public class IAPManager : MonoBehaviour, IStoreListener { private static IStoreController storeController; private static IExtensionProvider extensionProvider; public Text logText; private void Start() { InitializePurchasing(); } public void InitializePurchasing() { var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); builder.AddProduct("com.yourgame.product1", ProductType.Consumable, new IDs { { "com.yourgame.product1", AppleAppStore.Name } }); builder.AddProduct("com.yourgame.product2", ProductType.NonConsumable, new IDs { { "com.yourgame.product2", AppleAppStore.Name } }); builder.AddProduct("com.yourgame.product3", ProductType.Subscription, new IDs { { "com.yourgame.product3", AppleAppStore.Name } }); UnityPurchasing.Initialize(this, builder); } public void BuyProduct(string productId) { if (storeController != null) { Product product = storeController.products.WithID(productId); if (product != null && product.availableToPurchase) { storeController.InitiatePurchase(product); } else { Log("BuyProductID: " + productId + " fail. Not purchasing product, either is not found or is not available for purchase"); } } else { Log("BuyProductID FAIL. Not initialized."); } } public void RestorePurchases() { if (!IsInitialized()) { return; } if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.OSXPlayer) { Log("RestorePurchases started ..."); var apple = extensionProvider.GetExtension<IAppleExtensions>(); apple.RestoreTransactions((result) => { Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore."); }); } else { Log("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform); } } public bool IsInitialized() { return storeController != null && extensionProvider != null; } public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { Log("OnInitialized: PASS"); storeController = controller; extensionProvider = extensions; } public void OnInitializeFailed(InitializationFailureReason error) { Log("OnInitializeFailed InitializationFailureReason:" + error); } public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) { Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.id, failureReason)); } public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id)); // TODO: 按照购买的商品类型处理逻辑 return PurchaseProcessingResult.Complete; } private void Log(string message) { Debug.Log(message); logText.text = message; } } ``` 上述代码实现了Unity IAP插件的初始化、商品购买、恢复购买、支付回调等功能。在使用时,需要根据实际情况修改商品ID、商品类型、处理逻辑等信息。同时,需要在Unity IAP控制台中配置相应的商品信息,并在Xcode中进行支付设置和支付回调处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值