Unity 接微软支付(C++/CX)

26 篇文章 0 订阅
17 篇文章 0 订阅

1.介绍

项目是Unity通过IL2CPP & XAML导出的C++/CX的项目,如果是C#导出可以不用看这个,直接去看官网文档,查看例子即可。

 

2.相关代码(旧版本)

注意:SendMessageToU3D这个API,是向Unity发送消息。插件地址

微软文档:https://docs.microsoft.com/zh-cn/windows/uwp/monetize/enable-consumable-in-app-product-purchases

 

1.这是旧版API,流程是前端发起支付,支付成功后,拿交易的收据发给后端,需要后端去向微软验证订单合法性。

后端验证成功后,告诉前端订单确认。然后前端再调用函数MSConfirmOrder,通知微软此订单确认成功。

2.检查未确认的订单,是因为有可能出现网络问题,导致支付成功,却没有向微软确认订单可以发货。如果不检查,可能会导致用户,不能进行第二次购买。(建议每次游戏启动的时候,调用一次订单检查。旧版流程发起检查,拿到收据重新向后端发起验证....)

 

1.发起支付

void MainPage::MSPurchase(String^ productid)
{
	Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this, productid]
	{
		//develop: CurrentAppSimulator
		//release: CurrentApp 

		auto authTask = Concurrency::create_task(Windows::ApplicationModel::Store::CurrentApp::RequestProductPurchaseAsync(productid));
		authTask.then([=](Windows::ApplicationModel::Store::PurchaseResults^ result)
		{
			String^ message;
			switch (result->Status)
			{
			case Windows::ApplicationModel::Store::ProductPurchaseStatus::Succeeded:
				message = "0" + "#%#" + productid + "#%#" + result->TransactionId.ToString()+ "#%#" + result->ReceiptXml;
				break;
			default:
				message = ((int)result->Status).ToString() + "#%#" + productid;
				break;
			}
			SendMessageToU3D(3, message);
		});

	}));
}

2.订单确认

void MainPage::MSConfirmOrder(String^ message)
{
	Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this, message]
	{
		//develop: CurrentAppSimulator
		//release: CurrentApp 
		String^ temp_transactionId = message
		temp_transactionId = "{" + temp_transactionId + "}";

		GUID transactionId;
		HRESULT hr = IIDFromString(temp_transactionId->Data(), &transactionId);
		if (SUCCEEDED(hr)) {
			Platform::Guid UID(transactionId);
			auto authTask = Concurrency::create_task(Windows::ApplicationModel::Store::CurrentApp::ReportConsumableFulfillmentAsync(productid, UID));
			authTask.then([=](Windows::ApplicationModel::Store::FulfillmentResult result)
			{
				switch (result)
				{
				case Windows::ApplicationModel::Store::FulfillmentResult::Succeeded:
					//ok
					break;
				case Windows::ApplicationModel::Store::FulfillmentResult::NothingToFulfill:
					break;
				case Windows::ApplicationModel::Store::FulfillmentResult::PurchasePending:
					break;
				case Windows::ApplicationModel::Store::FulfillmentResult::PurchaseReverted:
					break;
				case Windows::ApplicationModel::Store::FulfillmentResult::ServerError:
					break;
				default:
					break;
				}
			});
		}
	}));
}

 

3.检查未完成订单

void MainPage::MSResumeOrder() 
{
	Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]
	{
		//develop: CurrentAppSimulator
		//release: CurrentApp 
		try
		{
			auto products = Concurrency::create_task(Windows::ApplicationModel::Store::CurrentApp::GetUnfulfilledConsumablesAsync());
			products.then([=](Windows::Foundation::Collections::IVectorView<Windows::ApplicationModel::Store::UnfulfilledConsumable^>^ Result) {
				for (int i = 0; i < Result->Size; ++i) {

					auto ProductID = Result->GetAt(i)->ProductId;
					auto transactionID = Result->GetAt(i)->TransactionId;
					auto requsetReceipt = Concurrency::create_task(Windows::ApplicationModel::Store::CurrentApp::GetProductReceiptAsync(ProductID));
					requsetReceipt.then([=](String^ Receipt) {
						SendMessageToU3D(5, ProductID + "#%#" + transactionID + "#%#" + Receipt);
					});
				}
			});
		}
		catch (Exception^ e)
		{
		
		}

	}));
}

3.新版API

 

口特点: 1.同时提供银行卡在线支付、声讯电话支付、互联星空支付、手机短信注册、腾讯财付通、 腾讯Q币、神州行充值卡、盛大游戏点卡、支付宝、手机银行、北京宽带支付、联通充值卡 等支付途径。 2.银行卡在线支付支持国内60 余种银行卡(信用卡、储蓄卡、借记卡等)在线支付。 3.全国声讯电话支付支持全国所有省份固定电话、小灵通、中国移动、中国联通手机, 开通移动、联通、电信、网通多个声讯热线号码。 4.中国电信互联星空支付支持直用163或ADSL上网帐号、各省互联星空网站注册用户支付。 5.支持中国移动、中国联通、中国电信小灵通手机用户发送短信点播赠送服务。 6.开放腾讯公司Q币和财付通支付口。 7.支持50元、100元、300元、500元等多种面值的移动神州行和联通充值卡支付。 8.各支付途径可任意选择开启或关闭。 9.真正傻瓜式支付口,提供示例程序,只需简单设置即可使用。 10.设置商户密钥,支付信息加密传递,加强支付安全性,加密系统与其他支付平台兼容。 11.贺喜支付平台(http://www.168reg.cn)提供完善的后台管理系统,提供定单管理、定单 统计、财务管理、用户资料修改、商户密钥设置、推荐用户及技术支持等功能。 12.提交支付信息时可设置服务名称、商户订单号和两个自定义字段,支付成功后实时将支 付结果返回商户网站。 13.提供口的测试模式,方便商户快捷地开发支付口程序。 14.您可以登录后台管理系统查看定单以下信息:定单号、用户支付金额、商户所得金额、 自定义订单号、支付日期、结帐信息等。 15.提供定单后台通知系统,彻底解决用户端返回造成的挂单、掉单现象。 16.提供宣传推广代码,推荐其他商户加盟可获得其收入的一定比例分成。 17.开放收费制商户,为商户降低支付成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值