AdEasyGo支付SDK是集成了多种支付SDK,最开始是没有C++/CX版的,那边的哥子再3个项目中抽时间移植过来的,虽然官网给了文档,但是有些是有问题的。
1、下载地址
http://www.adeasygo.com/download?sdk_type=2&id=10
下载好后解压放到自己工程需要的地方。
2、加入到工程
在VS2013中并没有引用这个项,只有原生的C#和VS2015才有。
选中自己的工程,右键->添加->引用,选择xxxxPaySDK.winmd(这个是Windows元数据,类似DLL)。
3、初始化SDK
设置Appkey和AppId
在使用所有的功能之前,你需要设置应用程序的Appkey和AppId。首先你需要在Adeasygo的管理后台添加应用来获取Appkey和AppId。
using namespace Adeasygo::PaySDKWP81;
在应用程序初始化模块中调用
SDKManager::SetKey("xxxx","yyyy");设置唯一标示符(xxxx为你的应用appkey,yyyy是AppId)
SDKManager::Init();
4、注册事件
HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs ^>(this, &MainPage::HardwareButtons_BackPressed);
SDKManager::PayDone += ref new EventHandler<PayDoneEventArgs ^>(this, &MainPage::PayDone);
SDKManager::ToMarketPurchase += ref new EventHandler <Adeasygo::PaySDKWP81::Model::MsPayEventArgs ^>(this, &MainPage::MsPurchas);
这里用到了BackPressed是手机的返回键,是因为在选择支付方式之前SDK是没有注册PayDone事件的,需要我们自己处理来关闭支付页面。在显示支付界面的时候需要标记,以免在没有支付界面的时候处理事件这里的事件,
5、获取产品列表和支付
SDKManager中有个GetGoods方法,返回值是一个IAsyncOperation的异步操作,应该用C++/CX的异步操作,而不是官网上的直接获取,正确的方法是
auto goodsOp = SDKManager::GetGoods();
auto goodsTask = create_task(goodsOp);
goodsTask.then([this](GoodsList^ goodslist)
{
for each(auto goods in goodslist->goods_list)
{
if (goods->id::get() == product_id)//此处的product_id是需要支付的产品id
{
SDKManager::Pay(goods->id, "1", goods->price, "$");
}
}
});
6、支付后处理
在支付成功和按返回键都会出发PayDone事件,需要在PayDone事件中关闭窗口,并进行订单验证。
7、订单验证
<span style="font-size:18px;">auto PayResultOp = SDKManager::GetUnSyncTrade();
auto PayResultTask = create_task(PayResultOp);
PayResultTask.then([=](TradeResultList^ resultList)
{
auto storeObj = StoreObject::getInstance();
int PAYED_SUCCESS = 1;
int PAYED_FAILED = 2;
int PAYED_PARAM_ERROR = 3;
int msg_code = resultList->code::get();
if (msg_code == PAYED_SUCCESS){
<span style="white-space: pre;"> </span>for each(auto result in resultList->traderesult)
{
String^ goods_id_rt = result->out_goods_id;
String^ uid_rt = SDKManager::DeviceUniqueId;
String^ trade_no_rt = result->trade_no;
}
}
else if (msg_code == PAYED_FAILED) {
}
else if (msg_code == PAYED_PARAM_ERROR){
}
});</span>
这里需要把这三个数据发到服务,服务器进行订单验证,详细看官网
http://www.adeasygo.com/document/index?id=78&c=27
7、微软支付需要单独接入