AliZiMAService.cs 5.96 KB
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
{
    /// <summary>
    /// 芝麻信用服务
    /// </summary>
    [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;

        /// <summary>
        /// 初始化一个<see cref="AliPayService"/>类型的新实例
        /// </summary>
        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 芝麻先享-信用服务下单
        /// <summary>
        /// 芝麻先享-信用服务下单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("CreateZhimaOrder")]
        public async Task<dynamic> CreateZhimaOrder(AliPayAppFreezeEntity input)
        {
           // 初始化SDK
            AlipayConfigUtil alipayConfigUtil = new AlipayConfigUtil(GetAlipayConfig());
            GenericExecuteApi api = new GenericExecuteApi();
            api.Client.SetAlipayConfigUtil(alipayConfigUtil);
            // 构造请求参数以调用接口
            OpenApiGenericRequest request = new OpenApiGenericRequest();
            // body参数
            Dictionary<string, Object> bizParams = new Dictionary<string, Object>();
            // 设置商户外部订单号
            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 芝麻先享-取消服务订单
        /// <summary>
        /// 芝麻先享-取消服务订单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("ZhimaOrderCancel")]
        public async Task<dynamic> 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
    }
}