using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Google.Protobuf.WellKnownTypes;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NCC.Common.Configuration;
using NCC.Common.Core.Manager;
using NCC.Common.Extension;
using NCC.Common.Helper;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys;
using NCC.Extend.Interfaces.AliPay;
using NCC.System.Entitys.Permission;
using NCC.System.Entitys.System;
using Newtonsoft.Json.Linq;
using SqlSugar;
using NCC.DataEncryption;
using NCC.Common.Const;
using Microsoft.AspNetCore.Http;
using Yitter.IdGenerator;
using NCC.Common.Extensions;
using Microsoft.AspNetCore.Components.Forms;
using NPOI.SS.Formula.Functions;
using AlipaySDKNet.OpenAPI.Util.Model;
using AlipaySDKNet.OpenAPI.Util;
using AlipaySDKNet.OpenAPI.Client;
using AlipaySDKNet.OpenAPI.Api;
using AlipaySDKNet.OpenAPI.Model;
namespace NCC.Extend.AliZiMA
{
///
/// 芝麻信用服务
///
[ApiDescriptionSettings(Tag = "芝麻信用服务", Name = "AliZiMA", Order = 200)]
[Route("api/Extend/[controller]")]
public class AliZiMAService : IAliZiMAService, IDynamicApiController, ITransient
{
private readonly SqlSugarScope _db;
private readonly IUserManager _userManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private static AlipayOptions _AlipayOptions;
///
/// 初始化一个类型的新实例
///
public AliZiMAService(ISqlSugarClient db, IUserManager userManager, IHttpContextAccessor httpContextAccessor)
{
_db = (SqlSugarScope)db;
_userManager = userManager;
_httpContextAccessor = httpContextAccessor;
}
[NonAction]
private static AlipayConfig GetAlipayConfig()
{
return new AlipayConfig
{
ServerUrl = "https://openapi.alipay.com",
// AppId = "2021005150691832",
AppId = App.Configuration["PaymentSettings:AlipayConfig:APPLETE_APPID"],
PrivateKey = App.Configuration["PaymentSettings:AlipayConfig:ALIPay_RSA_PRIVATEKEY"],
AlipayPublicKey = App.Configuration["PaymentSettings:AlipayConfig:ALIPay_RSA_ALI_PUBLICKEY"],
};
}
#region 芝麻先享-信用服务下单
///
/// 芝麻先享-信用服务下单
///
///
///
[HttpPost("CreateZhimaOrder")]
public async Task CreateZhimaOrder(AliPayAppFreezeEntity input)
{
// 初始化SDK
AlipayConfigUtil alipayConfigUtil = new AlipayConfigUtil(GetAlipayConfig());
GenericExecuteApi api = new GenericExecuteApi();
api.Client.SetAlipayConfigUtil(alipayConfigUtil);
// 构造请求参数以调用接口
OpenApiGenericRequest request = new OpenApiGenericRequest();
// body参数
Dictionary bizParams = new Dictionary();
// 设置商户外部订单号
bizParams.Add("out_order_no", input.OutOrderNo);
// 设置订单金额
bizParams.Add("order_amount", input.Amount.ToString());
// 设置只有当传递了order_amount时
bizParams.Add("amount_type", "RISK_AMOUNT");
// 设置芝麻信用服务ID
bizParams.Add("zm_service_id", "2025061600000000000104406000");
// 设置订单标题
bizParams.Add("subject", input.OrderTitle);
request.BodyParams = bizParams;
try
{
// 调用支付宝SDK执行接口
string response = api.SdkExecute("zhima.credit.payafteruse.creditbizorder.create", request.BodyParams, null, null);
return response;
}
catch (ApiException e)
{
// 记录异常信息并返回错误信息
Console.WriteLine("调用失败,code:" + e.ErrorCode + ",message:" + e.Message);
return $"调用失败,code:{e.ErrorCode},message:{e.Message}";
}
catch (Exception ex)
{
// 捕获其他未知异常
Console.WriteLine($"发生未知错误:{ex.Message}");
return $"发生未知错误:{ex.Message}";
}
}
#endregion
#region 芝麻先享-取消服务订单
///
/// 芝麻先享-取消服务订单
///
///
///
[HttpPost("ZhimaOrderCancel")]
public async Task ZhimaOrderCancel(AliPayOperationCancelEntity input)
{
AlipayConfigUtil alipayConfigUtil = new AlipayConfigUtil(GetAlipayConfig());
ZhimaCreditPayafteruseCreditbizorderApi instance = new ZhimaCreditPayafteruseCreditbizorderApi();
instance.Client.SetAlipayConfigUtil(alipayConfigUtil);
ZhimaCreditPayafteruseCreditbizorderFinishModel data = new ZhimaCreditPayafteruseCreditbizorderFinishModel();
data.OutRequestNo = input.OutOrderNo;
data.Remark = "完结订单";
data.IsFulfilled = "\"true\"";
data.CreditBizOrderId = "ZMCB20201021200102012";
try
{
var response = instance.Finish(data);
return response;
}
catch (ApiException e)
{
ZhimaCreditPayafteruseCreditbizorderFinishDefaultResponse errorObject = (ZhimaCreditPayafteruseCreditbizorderFinishDefaultResponse)e.ErrorObject;
Console.WriteLine("调用失败:" + errorObject);
return errorObject;
}
}
#endregion
}
}