UWP SDK支付

注意:

Win10版本的产品才可接入UWP SDK,如需接入请查阅【Untiy移植Windows 10版本】,【Cocos移植Windows 10版本】

根据Microsoft Store策略条款,开发者仅限使用Microsoft Store应用内购买API接口

简介

本文介绍了如何对接Miracle Games SDK的支付接口,打开支付窗口。

在调用支付接口前,确保已经完成了SDK的初始化【参考】。

目前一共有两种支付方式,分为微软支付及MG支付。在接入SDK结束后,微软的支付方式必须要等游戏上架后才能进行真正的微软支付。

该接口由MiracleGames统一管理,若需要开启支付功能,需要提前联系MG工作人员协助开通

用户支付流程图

用户支付

C#CPP

public async void ShowPayChannel()
{
    if (!MiracleGames.ApplicationManager.SetupCompletedSuccessfully)//检测是否初始化完成
        return;
   // goodsKey:商品Key,创建商品时由MiracleGames生成 
   // message:自定义参数,传递前进行urlencode。传入此参数,完成订单后会得到此参数
   // callbackid:回调地址唯一标识,在MG后台创建获得
   // 最后一个bool参数,ture:微软支付  false:第三方支付
    var result = await MiracleGames.PaymentManager.OpenPayChannelAsync(GoodsKey, message, callbackid, false);
    if (result.ReturnValue)//检测是否完成支付操作
    {
       
    }
    else
    {
        var msg = new MessageDialog("Cancel payment.");
        await msg.ShowAsync();
    }
}

Platform::String ^ MainPage::PurchaseGoodsMicrosoft(Platform::String^ goodsKey, Platform::String^ message)
{	
if (!MiracleGames::ApplicationManager::SetupCompletedSuccessfully)//检测是否初始化完成
	return;
		
    // goodsKey:商品Key,创建商品时由MiracleGames生成
    // message:自定义参数,传递前进行urlencode。传入此参数,完成订单后会得到此参数
    // callbackid:回调地址唯一标识,在MG后台创建获得
    // 最后一个bool参数,ture:微软支付  false:第三方支付
concurrency::create_task(MiracleGames::PaymentManager::OpenPayChannelAsync(goodsKey, message, callbackid, true))
	.then([](MiracleGames::Services::Core::Common::AsyncProcessResult^ result)
{
	if (result->ReturnValue)//检测是否完成支付操作
	{
		
	}
	else
	{
		// Cancel payment.
	
	}	
});
return "1";
}

支付成功后服务器端回调开发者服务器

支付成功后服务器端回调游戏客户端

如果游戏有服务器可接收回调,则无需接入此功能,直接接入服务器端的支付回调。

	
Loaded += ref new RoutedEventHandler([this](Object^, RoutedEventArgs^)//客户端支付回调
{
	MiracleGames::PaymentManager::AssetsChanged += ref new EventHandler(
		[&](Object^o, MiracleGames::AssetsChangedEventArgs^ args)//检测是否有未完成订单
		{

			int cnt = args->GetAssetsCount();
			for (int i = 0; i < cnt; i++)//遍历订单信息
			{
				auto item = args->GetAssetElementAt(i);
				
				if (item)
				{
					auto nm = item->DigitalGoods->Name->ToString();
					auto id = item->Id;
					auto comment = item->Comment;
					auto type= args->EventType;

					switch (type)
					{
					case 0:
						concurrency::create_task(item->ReportFulfillmentAsync()).then([=](MiracleGames::Services::Core::Common::AsyncProcessResult^ result) {
							if (result->ReturnValue)
							{
								//汇报订单已完成,发送道具
								auto meg = item->Comment;
								SendMessageToU3D(2, comment);
							}
							});
						break;

					case 1:
						concurrency::create_task(item->ReportFulfillmentAsync()).then([=](MiracleGames::Services::Core::Common::AsyncProcessResult^ result) {
							if (result->ReturnValue)
							{
								//汇报订单已完成,发送道具
								SendMessageToU3D(2, "补发道具");
							}
							});
						break;
					default:
						break;
					}
				}
			}
		});
});