Unity3D工具类 - soomla支付接口

1 篇文章 0 订阅
1 篇文章 0 订阅

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Odin Inspector是一个操作Unity对象的插件,可以增强Unity编辑器中的开发体验。Odin Inspector 3.0.4版本是该插件的一个更新版本,可以通过CSDN下载获得。 该插件通过注解的方式可以为Unity对象添加更多的编辑器控件,如:枚举选择器,拖拽选择器,开关按钮等。同时,该插件也提供了一些常用的数据类型,如:字典、序列化树等。 Odin Inspector使用起来非常方便,只需要在需要增强的类或属性前添加对应的注解即可,这样就可以在Unity编辑器中变得更加灵活和直观。此外,Odin Inspector还提供了一些自定义的标记属性,可用于美化编辑器界面或增加辅助功能。 总的来说,Odin Inspector插件是一个非常实用的Unity开发工具,可以为Unity开发者提高开发效率和开发体验。而CSDN下载的unity3d文档类资源,也为我们提供了方便的使用说明和示例代码,有助于我们更快地上手和运用该插件。 ### 回答2: Odin Inspector是Unity3D的插件,这个插件可以在Unity编辑器中为开发人员提供更多的调试、编辑和自定义选项。Odin Inspector的3.0.4版本是最新的版本,这个版本通过提供更多的功能来提高了编辑器的性能和效率。Odin Inspector 3.0.4支持C#生成代码,这使得开发者可以以更快的速度编写代码,而且还提供了一个强大的反射系统,能够在使用过程中自动为脚本创建编辑器。此外,Odin Inspector可以让开发者轻松地创建自定义的编辑器窗口和面板,并提供多种工具和快捷键以帮助开发者更加高效地开发Unity项目。 而在CSDN上可以下载Unity3D文档类资源,这些资源包括了Unity3D的官方文档以及其他一些非官方的教程和手册。这些资源可以帮助开发者学习Unity3D的基础知识和高级技巧,并且对于使用Odin Inspector来增强开发人员的编辑器体验来说也非常有用。在CSDN上下载这些资源非常容易,只需要注册并登录即可随时下载和使用。 总之,Odin Inspector版本3.0.4和CSDN中的Unity3D文档类资源都可以帮助Unity3D开发者提高效率和编写更好的代码。它们是Unity3D开发过程中的重要工具,能够帮助开发者更好地利用Unity编辑器的功能,并加速开发过程。 ### 回答3: Unity是一款流行的游戏引擎,为了方便开发者使用Unity,社区推出了许多插件,其中Odin Inspector 3.0.4版本是一个非常优秀的插件。这个插件可以用来简化Unity的开发流程,提高开发效率。 Odin Inspector 3.0.4版本主要提供了一些高级编辑器功能,如可定制化的Inspector面板、可扩展属性系统、强大的序列化和反序列化等。它还包含了一些常用的扩展功能,如资源管理器、GUI工具、命名空间工具等等。它的强大功能让开发者可以更加方便地设置和管理游戏中的各种对象和组件。 此外,Unity3D文档类资源在开发过程中也起到了不可替代的作用。这些文档提供了关于Unity3D的详细信息和指南,包括游戏开发、图形渲染、物理引擎、脚本编程等方面的内容。 Odin Inspector 3.0.4版本和Unity3D文档类资源可以通过CSDN进行下载,CSDN是一个技术社区,拥有大量的技术资源和开发者社区。通过下载Odin Inspector 3.0.4版本和Unity3D文档类资源,开发者可以更加高效地使用Unity进行游戏开发,同时也可以获得更多的技术帮助和指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值