Unity3D工具類 - soomla支付接口

Unity 支付

針對手機市場需要接入很多支付sdk,google iso 支付寶,微信等對接支付接口,許多第三方已經整合了這一部分代碼,這裏介紹一下google和ios支付接入,使用的是soomla插件

soomla插件介紹

官方網站:
https://soom.la/
包的下載網站:
http://download.csdn.net/detail/sxd612612/9700311

1.下載資源包後,導入unity中,包只支持unity5.0以上版本
2.將下面資源拷貝到你的工程中
這裏寫圖片描述

3.配置soomla
google play會說到
工程中需要到StoreEvents prefab
這裏寫圖片描述

3.代碼
1.在你的 AndroidManifest.xml 增加權限 (for Google Play):

2.GooglePlayIabService.getInstance().setPublicKey(“[YOUR PUBLIC KEY FROM THE MARKET]”);
這裏本地公鑰

3.GooglePlayIabService.AllowAndroidTestPurchases = true; //如果你需要測試

4.打開商店服務
SoomlaStore.getInstance().startIabServiceInBg();

5.關閉商店服務
SoomlaStore.getInstance().stopIabServiceInBg();

文件 PayItem.cs 這裏你需要繼承IStoreAssets,仿照下面寫一個即可

using System.Collections.Generic;
using Soomla.Store;

public class PayItem : IStoreAssets
{
    #region Consts
    private const string COIN_PACK_10_PRODUCT_ID = "coins_3";
    private const string COIN_PACK_50_PRODUCT_ID = "coins_5";
    private const string COIN_PACK_1000_PRODUCT_ID = "coins_10";
    private const string SHIELD_PRODUCT_ID = "shield";
    private const string SHIELD_PACK_5_PRODUCT_ID = "shields_5";
    private const string NO_ADS_PRODUCT_ID = "no_ads";
    private const string ARMOR_PRODUCT_ID = "armor";
    private const string SOOMLA_SHIRT_PRODUCT_ID = "soomla_shirt";
    private const string SPARTONIX_SHIRT_PRODUCT_ID = "spartonix_shirt";
    private const string SHIELD_DURABILITY_PRODUCT_ID = "shield_dur_";
    private const string SHIELD_DURABILITY_NAME = "Durability ";
    private const string SHIELD_DURABILITY_DESC = "Increases shield durability to ";
    #endregion

    #region Categories
    public static VirtualCategory WearableGearCategory = new VirtualCategory(
        "WearableGear", new List<string>
        {
            ARMOR_PRODUCT_ID,
            SOOMLA_SHIRT_PRODUCT_ID,
            SPARTONIX_SHIRT_PRODUCT_ID
        }
    );
    #endregion

    #region Virtual Currencies
    /// <summary>
    /// A coin that serves as an in-game currency
    /// </summary>
    public static VirtualCurrency Coin = new VirtualCurrency(
      "Coin",                           // Name
      "Collect coins to buy items",     // Description
      "currency_coin"                   // Item ID
    );
    #endregion

    #region Virtual Currency Packs
    public static VirtualCurrencyPack CoinPack3 = new VirtualCurrencyPack(
        "10 Coins",                          // Name
        "This is a 10-coin pack",            // Description
        COIN_PACK_10_PRODUCT_ID,             // Item ID
        10,                                  // Number of currencies in the pack
        Coin.ItemId,                        // The currency associated with this pack
        new PurchaseWithMarket(             // Purchase type
            COIN_PACK_10_PRODUCT_ID,         // Product ID
            0.99)                           // Initial price
        );

    public static VirtualCurrencyPack CoinPack5 = new VirtualCurrencyPack(
        "50 Coins",                          // Name
        "This is a 50-coin pack",            // Description
        COIN_PACK_50_PRODUCT_ID,             // Item ID
        50,                                  // Number of currencies in the pack
        Coin.ItemId,                        // The currency associated with this pack
        new PurchaseWithMarket(             // Purchase type
            COIN_PACK_50_PRODUCT_ID,         // Product ID
            1.99)                           // Initial price
        );

    public static VirtualCurrencyPack CoinPack10 = new VirtualCurrencyPack(
        "1000 Coins",                         // Name
        "This is a 1000-coin pack",           // Description
        COIN_PACK_1000_PRODUCT_ID,            // Item ID
        1000,                                 // Number of currencies in the pack
        Coin.ItemId,                        // The currency associated with this pack
        new PurchaseWithMarket(             // Purchase type
            COIN_PACK_1000_PRODUCT_ID,        // Product ID
            2.49)                           // Initial price
        );
    #endregion

    #region Virtual Goods
    /// <summary>
    /// Shield that can be purchased for 150 coins.
    /// </summary>
    public static VirtualGood Shield = new SingleUseVG(
        "Shield",                           // Name
        "Shields you from monsters",        // Description
        SHIELD_PRODUCT_ID,                  // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            150)                            // Payment amount
    );

    /// <summary>
    /// Pack of 5 shields that can be purchased for $2.99.
    /// </summary>
    public static VirtualGood ShieldPack5 = new SingleUsePackVG(
        Shield.ItemId,                 // Good Item ID
        5,                             // Amount
        "5 Shields",                   // Name
        "This is a 5-shield pack",     // Description
        SHIELD_PACK_5_PRODUCT_ID,      // Item ID
        new PurchaseWithMarket(        // Purchase type
            SHIELD_PACK_5_PRODUCT_ID,  // Product ID
            2.99)                      // Initial price
        );

    /// <summary>
    /// Remove ads from the game, purchased for $0.99.
    /// </summary>
    public static VirtualGood NoAds = new LifetimeVG(
        "No Ads",                       // Name
        "Remove ads forever",           // Description
        NO_ADS_PRODUCT_ID,              // Item ID
        new PurchaseWithMarket(         // Purchase type
            NO_ADS_PRODUCT_ID,          // Product ID
            0.99)                       // Initial price
        );

    #region Equipables
    /// <summary>
    /// An equipable weapon that can be purchased for 7 coins.
    /// </summary>
    public static VirtualGood Sword = new EquippableVG(
        EquippableVG.EquippingModel.LOCAL,  // Equipping Model
        "Sword",                            // Name
        "Slash your enemies!",              // Description
        "sword",                            // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            7));                            // Payment amount

    /// <summary>
    /// An equipable weapon that can be purchased for 7 coins.
    /// </summary>
    public static VirtualGood PlasmaGun = new EquippableVG(
        EquippableVG.EquippingModel.LOCAL,  // Equipping Model
        "Plasma Gun",                       // Name
        "Spray & Pray",                     // Description
        "plasma_gun",                       // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            7));                           // Payment amount

    /// <summary>
    /// An equipable weapon that can be purchased for 7 coins.
    /// </summary>
    public static VirtualGood SoomlaBotSidekick = new EquippableVG(
        EquippableVG.EquippingModel.LOCAL,  // Equipping Model
        "SoomlaBot Sidekick",               // Name
        "The best sidekick EVER!",          // Description
        "soomlabot_sidekick",               // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            7));                           // Payment amount

    /// <summary>
    /// An equipable armor that can be purchased for 7 coins.
    /// </summary>
    public static VirtualGood Armor = new EquippableVG(
        EquippableVG.EquippingModel.CATEGORY,   // Equipping Model
        "Armor",                                // Name
        "Increases you defense",                // Description
        ARMOR_PRODUCT_ID,                       // Item ID
        new PurchaseWithVirtualItem(            // Purchase type
            Coin.ItemId,                        // Virtual item to pay with
            7));                                // Payment amount

    /// <summary>
    /// An equipable shirt that can be purchased for 17 coins.
    /// </summary>
    public static VirtualGood SoomlaShirt = new EquippableVG(
        EquippableVG.EquippingModel.CATEGORY,   // Equipping Model
        "Soomla Shirt",                         // Name
        "Spread the word - Soomla's great!",    // Description
        SOOMLA_SHIRT_PRODUCT_ID,                // Item ID
        new PurchaseWithVirtualItem(            // Purchase type
            Coin.ItemId,                        // Virtual item to pay with
            17));                               // Payment amount

    /// <summary>
    /// An equipable shirt that can be purchased for 27 coins.
    /// </summary>
    public static VirtualGood SpartonixShirt = new EquippableVG(
        EquippableVG.EquippingModel.CATEGORY,   // Equipping Model
        "Spartonix Shirt",                      // Name
        "Look cool :)",                         // Description
        SPARTONIX_SHIRT_PRODUCT_ID,             // Item ID
        new PurchaseWithVirtualItem(            // Purchase type
            Coin.ItemId,                        // Virtual item to pay with
            27));                               // Payment amount 

    /// <summary>
    /// A playable character that can be purchased for 27 coins.
    /// </summary>
    public static VirtualGood Character1 = new EquippableVG(
        EquippableVG.EquippingModel.GLOBAL, // Equipping Model
        "Character 1",                      // Name
        "Character #1",                     // Description
        "character_1",                      // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            0));                            // Payment amount 

    /// <summary>
    /// A playable character that can be purchased for 27 coins.
    /// </summary>
    public static VirtualGood Character2 = new EquippableVG(
        EquippableVG.EquippingModel.GLOBAL, // Equipping Model
        "Character 2",                      // Name
        "Character #2",                     // Description
        "character_2",                      // Item ID
        new PurchaseWithVirtualItem(        // Purchase type
            Coin.ItemId,                    // Virtual item to pay with
            1000));                         // Payment amount 
    #endregion

    #region Upgrades
    /// <summary>
    /// Upgrade shield durability level 1
    /// </summary>
    public static VirtualGood ShieldDurability1 = CreateUpgrade(
        Shield,                         // Upgraded Item
        SHIELD_DURABILITY_PRODUCT_ID,   // Item ID
        SHIELD_DURABILITY_NAME + 3,     // Name
        SHIELD_DURABILITY_DESC,         // Decription
        1,                              // Level
        0);                             // Price (Costs 0 so it can be set as default)

    /// <summary>
    /// Upgrade shield durability level 2
    /// </summary>
    public static VirtualGood ShieldDurability2 = CreateUpgrade(
        Shield,                         // Upgraded Item
        SHIELD_DURABILITY_PRODUCT_ID,   // Item ID
        SHIELD_DURABILITY_NAME + 7,     // Name
        SHIELD_DURABILITY_DESC,         // Decription
        2,                              // Level
        12);                            // Price

    /// <summary>
    /// Upgrade shield durability level 3
    /// </summary>
    public static VirtualGood ShieldDurability3 = CreateUpgrade(
        Shield,                         // Upgraded Item
        SHIELD_DURABILITY_PRODUCT_ID,   // Item ID
        SHIELD_DURABILITY_NAME + 15,    // Name
        SHIELD_DURABILITY_DESC,         // Decription
        3,                              // Level
        30);                            // Price

    /// <summary>
    /// Upgrade shield durability level 4
    /// </summary>
    public static VirtualGood ShieldDurability4 = CreateUpgrade(
        Shield,                         // Upgraded Item
        SHIELD_DURABILITY_PRODUCT_ID,   // Item ID
        SHIELD_DURABILITY_NAME + 32,    // Name
        SHIELD_DURABILITY_DESC,         // Decription
        4,                              // Level
        80);                            // Price

    /// <summary>
    /// Upgrade shield durability level 5
    /// </summary>
    public static VirtualGood ShieldDurability5 = CreateUpgrade(
        Shield,                         // Upgraded Item
        SHIELD_DURABILITY_PRODUCT_ID,   // Item ID
        SHIELD_DURABILITY_NAME + 100,   // Name
        SHIELD_DURABILITY_DESC,         // Decription
        5,                              // Level
        200,                            // Price
        true);                          // Last 
    #endregion
    #endregion

    #region Private Functions
    private static VirtualGood CreateUpgrade(VirtualItem upgradedGood, string upgradeItemId, string upgradeName, string upgradeDescription, int level, int price, bool isLast = false)
    {
        var prevItemId = level > 1 ? upgradeItemId + (level - 1) : null;
        var nextItemId = isLast ? null : upgradeItemId + (level + 1);

        return new UpgradeVG(
        upgradedGood.ItemId,            // Good Item ID
        nextItemId,                     // Next Upgrade Item ID
        prevItemId,                     // Previous Upgrade Item ID
        upgradeName,                    // Name
        upgradeDescription + level,     // Description
        upgradeItemId + level,          // Item ID
        new PurchaseWithVirtualItem(    // Purchase type
            Coin.ItemId,                // Virtual item to pay with
            price)                      // Payment amount
        );
    }
    #endregion

    #region Public Functions
    public int GetVersion()
    {
        return 1;
    }

    public VirtualCurrency[] GetCurrencies()
    {
        return new[] { Coin };
    }

    public VirtualGood[] GetGoods()
    {
        return new[]
        {
            Shield,
            ShieldPack5,
            NoAds,
            Sword,
            PlasmaGun,
            SoomlaBotSidekick,
            Armor,
            SoomlaShirt,
            SpartonixShirt,
            Character1,
            Character2,
            ShieldDurability1,
            ShieldDurability2,
            ShieldDurability3,
            ShieldDurability4,
            ShieldDurability5
        };
    }

    public VirtualCurrencyPack[] GetCurrencyPacks()
    {
        return new[] { CoinPack3, CoinPack5, CoinPack10 };
    }

    public VirtualCategory[] GetCategories()
    {
        return new[] { WearableGearCategory };
    }
    #endregion
}

文件PayHelp.cs

using UnityEngine;
using System.Collections;
using game;
using Game;
using Soomla.Store;

namespace game
{
    public class PayHelper
    {
        private static PayHelper _instance = null;
        private bool _holdOn = false;
        private PayItem _gameAssets;
        public static PayHelper Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new PayHelper();
                return _instance;
            }
        }

        public void onInit()
        {
            if (!SoomlaStore.Initialized)
            {
                SoomlaStore.Initialize(getGameAssets());
            }
            SoomlaStore.StartIabServiceInBg();
            StoreEvents.OnCurrencyBalanceChanged += onCurrencyBalanceChanged;
            StoreEvents.OnUnexpectedStoreError += onUnexpectedStoreError;
            StoreEvents.OnBillingNotSupported += onBillingNotSupported;
            StoreEvents.OnMarketRefund += onMarketRefund;
            StoreEvents.OnMarketPurchaseCancelled += onMarketPurchaseCancelled;
        }


        public  PayItem getGameAssets()
        {
            if(_gameAssets==null)
                _gameAssets = new PayItem();
            return _gameAssets;
        }

        public void onExit()
        {
            if (StoreEvents.OnCurrencyBalanceChanged != null)
                StoreEvents.OnCurrencyBalanceChanged -= onCurrencyBalanceChanged;
            if (StoreEvents.OnUnexpectedStoreError != null)
                StoreEvents.OnUnexpectedStoreError -= onUnexpectedStoreError;
            if (StoreEvents.OnBillingNotSupported != null)
                StoreEvents.OnBillingNotSupported -= onBillingNotSupported;
            if (StoreEvents.OnMarketRefund != null)
                StoreEvents.OnMarketRefund -= onMarketRefund;
            if (StoreEvents.OnMarketPurchaseCancelled != null)
                StoreEvents.OnMarketPurchaseCancelled -= onMarketPurchaseCancelled;
            SoomlaStore.StopIabServiceInBg();
        }

        /// <summary>
        /// 內購支付
        /// </summary>
        /// <param name="productId">應用內購商品的ID</param>
        /// <param name="payload">購買成功後的信息</param>
        public void onPay(string productId, string payload)
        {
            SoomlaStore.BuyMarketItem(productId, payload);
        }


        /// <summary>
        /// 交易成功回調
        /// </summary>
        /// <param name="virtualCurrency"></param>
        /// <param name="balance"></param>
        /// <param name="amountAdded"></param>
        public void onCurrencyBalanceChanged(VirtualCurrency virtualCurrency, int balance, int amountAdded)
        {
            //TODO
        }

        /// <summary>
        /// 交易失敗回調
        /// </summary>
        /// <param name="errorCode"></param>
        public void onUnexpectedStoreError(int errorCode)
        {
            //code=3 無法連接到APP Stroe

            switch (errorCode)
            {
                //TODO
            }

            HoldOn = false;
        }


        /// <summary>
        /// 交易不支持
        /// </summary>
        public void onBillingNotSupported()
        {
            //TODO
            HoldOn = false;
        }

        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="item"></param>
        public void onMarketRefund(PurchasableVirtualItem item)
        {
            //TODO
            HoldOn = false;
        }

        /// <summary>
        /// 交易取消
        /// </summary>
        /// <param name="item"></param>
        public void onMarketPurchaseCancelled(PurchasableVirtualItem item)
        {
            //TODO
            HoldOn = false;
        }

        public bool HoldOn
        {
            get
            {
                return _holdOn;
            }

            set
            {
                _holdOn = value;
                //waiting.SetActive(value);
            }
        }

    }

} 

使用 TestSomla.cs

void Start()
{
    #if !UNITY_EDITOR && (UNITY_IPHONE || UNITY_ANDROID)
        PayHelper.Instance.onInit();
    #endif
}

void OnGUI()
    {

        if (GUILayout.Button("金幣1", GUILayout.Height(100), GUILayout.Width(150)))
        {
            PayHelper.Instance.onPay("googleplay後臺配置的商品ID_1001", "coins");
        }
        if (GUILayout.Button("金幣2", GUILayout.Height(100), GUILayout.Width(150)))
        {
            PayHelper.Instance.onPay("googleplay後臺配置的商品ID_1002", "golds");
        }

    }


Google play

參考網站:
http://blog.csdn.net/qq15233635728/article/details/44015225
http://www.ithao123.cn/content-5719778.html

  1. 需要一個翻*牆軟件

  2. 需要註冊一個Gmail賬號
    https://mail.google.com/mail/

  3. 註冊Google 開發者賬號
    https://play.google.com/apps/publish/signup/

  4. 需要一張信用卡,支付25$註冊開發者賬戶
    這裏寫圖片描述
    這裏寫圖片描述

  5. 添加一個應用程序,上傳你的apk文件
    這裏寫圖片描述
    注意google 上傳文件大小不能大於50M,所有我們需要分包上傳,google需要上傳兩次纔會出現擴展包上傳界面,此外你需要有效的簽名
    a. 分包
    這裏寫圖片描述
    b. 再次上傳
    這裏寫圖片描述
    c. 簽名
    這裏寫圖片描述
    這裏寫圖片描述

  6. 發佈你的應用程序,如果不能發佈請查看原因
    這裏寫圖片描述
    這裏寫圖片描述

  7. 配置smoola
    這裏寫圖片描述
    這裏寫圖片描述

  8. 等待三五個小時(google會審覈你的應用程序),得到一個開發者的共享下載鏈接地址
    這裏寫圖片描述

  9. 將地址在手機端輸入
    這裏寫圖片描述

ios 支付

參考網站(此類網站比較多你可以百度一下)(略)

  1. 配置
    待續
  2. 代碼
    待續
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章