Unity3D工具类 - soomla支付接口

来源:互联网 发布:淘宝死店还能活吗 编辑:程序博客网 时间:2024/05/21 10:30

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. 代码
    待续
0 0
原创粉丝点击