using Microsoft.VisualStudio.TestTools.UnitTesting;
using Senparc.CO2NET.Extensions;
using Senparc.Weixin.Helpers;
using Senparc.Weixin.TenPayV3.Apis.Marketing;
using Senparc.Weixin.TenPayV3.Entities;
using System;
namespace Senparc.Weixin.TenPayV3.Apis.Tests
{
public partial class MarketingApisTests
{
#region 商家券接口
CreateBusifavorStockReturnJson createBusifavorStockResult = null;
DistributeStockReturnJson distributeBusifavorStockResult = null;
QueryBusifavorPayReceiptsReturnJson queryBusifavorPayReceiptsReturnJson = null;
///
/// 创建商家券接口批次测试
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_1.shtml
///
[TestMethod()]
public void CreateBusifavorStockAsyncTest()
{
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
// 商家券使用规则 即刻开始 发1小时 生效1天 满100减10
var coupon_use_rule = new CreateBusifavorStockRequestData.Coupon_Use_Rule(new(new TenpayDateTime(DateTime.Now), new TenpayDateTime(DateTime.Now.AddHours(1)), 1, null, null, null), new(100, 10), null, null, "OFF_LINE", null, null);
// 商家券发放规则
var stock_send_rule = new CreateBusifavorStockRequestData.Stock_Send_Rule(10, 1, 10, true);
// TODO:流水号?这样是否有效?
var out_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new CreateBusifavorStockRequestData("Senparc微信支付V3商家券测试", TenPayV3Info.MchId, null, "微信支付V3商家券测试使用", "NORMAL", coupon_use_rule, stock_send_rule, out_request_no, null, null, "WECHATPAY_MODE", null, false);
var marketingApis = new MarketingApis();
createBusifavorStockResult = marketingApis.CreateBusifavorStockRequestDataAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 创建商家券接口批次结果:" + createBusifavorStockResult.ToJson(true));
Assert.IsNotNull(createBusifavorStockResult);
Assert.IsTrue(createBusifavorStockResult.ResultCode.Success);
Assert.IsTrue(createBusifavorStockResult.VerifySignSuccess == true);//通过验证
}
///
/// 查询商家券批次详情接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_2.shtml
///
[TestMethod()]
public void QueryBusifavorStockAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var marketingApis = new MarketingApis();
var result = marketingApis.QueryBusifavorStockAsync(createBusifavorStockResult.stock_id).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 查询商家券批次详情接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 核销商家券接口测试
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_3.shtml
///
[TestMethod()]
public void UseBusifavorCouponAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
// TODO:流水号?这样是否有效?
var use_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
var requestData = new UseBusifavorCouponRequestData(coupon_code, createBusifavorStockResult.stock_id, TenPayV3Info.AppId, new TenpayDateTime(DateTime.Now), use_request_no, openId);
var marketingApis = new MarketingApis();
var result = marketingApis.UseBusifavorCouponAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 核销商家券接口批次结果:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 根据过滤条件查询商家券用户券接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_4.shtml
///
[TestMethod()]
public void QueryBusifavorCouponsAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var marketingApis = new MarketingApis();
var result = marketingApis.QueryBusifavorCouponsAsync(openId, TenPayV3Info.AppId, createBusifavorStockResult.stock_id, null, null, null, null).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 根据过滤条件查询商家券用户券接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 查询用户单张券详情接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_4.shtml
///
[TestMethod()]
public void QueryBusifavorCouponAsyncTest()
{
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
var marketingApis = new MarketingApis();
var result = marketingApis.QueryBusifavorCouponAsync(coupon_code, TenPayV3Info.AppId, openId).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 查询用户单张券详情接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 上传预存code接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_6.shtml
///
[TestMethod()]
public void SetBusifavorCouponCodesAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
// TODO:流水号?这样是否有效?
var upload_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
string[] coupon_code_list = { "" }; //TODO: 此处需要商家已有自己的优惠券系统生成code_list
var requestData = new SetBusifavorCouponCodesRequestData(createBusifavorStockResult.stock_id, coupon_code_list, upload_request_no);
var marketingApis = new MarketingApis();
var result = marketingApis.SetBusifavorCouponCodesAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 上传预存code结果:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 设置商家券事件通知地址接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_7.shtml
///
[TestMethod()]
public void SetBusifavorSetNotifyUrlAsyncTest()
{
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var notify_url = "senparc.com/SetBusifavorCouponCodesAsyncTest";// TODO:这个url我随便设置的
var requestData = new SetBusifavorSetNotifyUrlRequestData(TenPayV3Info.MchId, notify_url);
var marketingApis = new MarketingApis();
var result = marketingApis.SetBusifavorSetNotifyUrlAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 设置商家券事件通知地址接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 查询商家券事件通知地址接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_8.shtml
///
[TestMethod()]
public void QueryBusifavorNotifyUrlAsyncTest()
{
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var marketingApis = new MarketingApis();
var result = marketingApis.QueryBusifavorNotifyUrlAsync(TenPayV3Info.MchId).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 查询商家券事件通知地址接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 关联订单信息接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_9.shtml
///
[TestMethod()]
public void AssociateBusifavorAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
// TODO:流水号?这样是否有效?
var out_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var out_trade_no = "";//TODO: 这里应该填上已有订单的out_trade_no
var requestData = new AssociateBusifavorRequestData(createBusifavorStockResult.stock_id, coupon_code, out_trade_no, out_request_no);
var marketingApis = new MarketingApis();
var result = marketingApis.AssociateBusifavorAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 关联订单信息接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 取消关联订单信息接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_10.shtml
///
[TestMethod()]
public void DisassociateBusifavorAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
// TODO:流水号?这样是否有效?
var out_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var out_trade_no = "";//TODO: 这里应该填上已有订单的out_trade_no
var requestData = new DisassociateBusifavorRequestData(createBusifavorStockResult.stock_id, coupon_code, out_trade_no, out_request_no);
var marketingApis = new MarketingApis();
var result = marketingApis.DisassociateBusifavorAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 取消关联订单信息接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 修改批次预算接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_11.shtml
///
[TestMethod()]
public void ModifyBusifavorStockBudgetAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
// TODO:流水号?这样是否有效?
var modify_budget_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new ModifyBusifavorStockBudgetRequestData(20, null, null, null, modify_budget_request_no);
var marketingApis = new MarketingApis();
var result = marketingApis.ModifyBusifavorStockBudgetAsync(createBusifavorStockResult.stock_id, requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 修改批次预算接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 修改商家券基本信息接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_12.shtml
///
[TestMethod()]
public void ModifyBusifavorStockInformationAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
// TODO:流水号?这样是否有效?
var out_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new ModifyBusifavorStockInformationRequestData(null, "Senparc微信支付V3商家券测试-修改", null, null, out_request_no, null, null, null, null);
var marketingApis = new MarketingApis();
var result = marketingApis.ModifyBusifavorStockInformationAsync(createBusifavorStockResult.stock_id, requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 修改商家券基本信息接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 申请退券接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_13.shtml
///
[TestMethod()]
public void ReturnBusifavorCouponAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
// TODO:流水号?这样是否有效?
var return_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new ReturnBusifavorCouponRequestData(coupon_code, createBusifavorStockResult.stock_id, return_request_no);
var marketingApis = new MarketingApis();
var result = marketingApis.ReturnBusifavorCouponAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 申请退券接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 使券失效接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_14.shtml
///
[TestMethod()]
public void DeactivateBusifavorCouponAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
// TODO:流水号?这样是否有效?
var deactivate_request_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new DeactivateBusifavorCouponRequestData(coupon_code, createBusifavorStockResult.stock_id, deactivate_request_no, "Senparc接口单元测试");
var marketingApis = new MarketingApis();
var result = marketingApis.DeactivateBusifavorCouponAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 使券失效接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 营销补差付款接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_16.shtml
///
[TestMethod()]
public void PayBusifavorReceiptsAsyncTest()
{
if (createBusifavorStockResult is null)
{
CreateBusifavorStockAsyncTest();
}
var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting);
var TenPayV3Info = TenPayV3InfoCollection.Data[key];
var coupon_code = "coupon_code";// TODO: 发券似乎还是V2接口 或者 微信支付平台流量场景发放 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_2_1.shtml
var transaction_id = "transaction_id";// TODO: 填入现有订单的transaction_id
var payer_merchant = "payer_merchant";// TODO: 收款商户号 需要另一个收款的商户号
// TODO:流水号?这样是否有效?
var out_subsidy_no = string.Format("{0}{1}{2}", TenPayV3Info.MchId/*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6));
var requestData = new PayBusifavorReceiptsRequestData(createBusifavorStockResult.stock_id, coupon_code, out_subsidy_no, transaction_id, payer_merchant, 100, "Senparc营销补差付款接口单元测试", out_subsidy_no);
var marketingApis = new MarketingApis();
var result = marketingApis.PayBusifavorReceiptsAsync(requestData).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 营销补差付款接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
///
/// 查询营销补差付款单详情接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_2_18.shtml
///
[TestMethod()]
public void QueryBusifavorPayReceiptsAsyncTest()
{
if (queryBusifavorPayReceiptsReturnJson is null)
{
PayBusifavorReceiptsAsyncTest();
}
var marketingApis = new MarketingApis();
var result = marketingApis.QueryBusifavorPayReceiptsAsync(queryBusifavorPayReceiptsReturnJson.subsidy_receipt_id).GetAwaiter().GetResult();
Console.WriteLine("微信支付 V3 查询营销补差付款单详情接口:" + result.ToJson(true));
Assert.IsNotNull(result);
Assert.IsTrue(result.ResultCode.Success);
Assert.IsTrue(result.VerifySignSuccess == true);//通过验证
}
#endregion
}
}