您的位置:首页 > 移动开发 > Unity3D

Unity3D工具类 - soomla支付接口

2016-12-02 19:39 344 查看

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
4000
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 支付-somla