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
需要一个翻*墙软件
需要注册一个Gmail账号
https://mail.google.com/mail/注册Google 开发者账号
https://play.google.com/apps/publish/signup/需要一张信用卡,支付25$注册开发者账户
添加一个应用程序,上传你的apk文件
注意google 上传文件大小不能大于50M,所有我们需要分包上传,google需要上传两次才会出现扩展包上传界面,此外你需要有效的签名
a. 分包
b. 再次上传
c. 签名
发布你的应用程序,如果不能发布请查看原因
配置smoola
等待三五个小时(google会审核你的应用程序),得到一个开发者的共享下载链接地址
将地址在手机端输入
ios 支付
参考网站(此类网站比较多你可以百度一下)(略)
- 配置
待续 - 代码
待续
- Unity3D工具类 - soomla支付接口
- Unity3D GUI类接口
- 支付工具类
- Unity3D中的工具类
- 调用支付宝支付的工具类
- android支付宝支付工具类
- 生成微信支付接口的签名工具
- 支付宝网银支付接口
- 支付宝支付接口
- 支付宝扫码支付接口
- 支付接口
- 微信支付工具类
- 微信支付工具类
- unity3D-接口
- unity3d接口
- Unity3D工具类 - 读写文件
- Unity3d IOS支付验证
- thinkphp3.2支付宝接口类教程
- Failed to resolve: com.android.support.fragment_mine.espresso:espresso-core:2.2.2
- [LeetCode]Surrounded Regions
- 编译原理作业3,4
- 迷宫问题
- cenos 7 上安装phpmyadmin
- Unity3D工具类 - soomla支付接口
- shell 学习杂记一
- android启动应用得 Uri.parse(path + projct + ".apk"), "application/and.and.package-archive"
- c#中自定义集合的实现
- linux(ubuntu) 安裝solr6.3 在tomcat8上 創建core
- 2016河海大学程序设计大赛专业组题解 快速幂取模 博弈论 背包 floyd
- 测试开发之----给你的apk加上时间分片的log记录
- Spark的算子的分类
- poj 2828POJ2828 Buy Tickets【线段树,逆序遍历】