.Net Core API网站调用支付宝第三方API(实现授权验证、实名认证、银行卡发行银行校验)

阅读需要:3分钟
框架版本:.Net Core 3.1
系统及开发环境:Windows10、VS2019
需要引入的Package包命令:Install-Package AlipaySDKNet.Standard

主要包含两个类,一个服务类,一个常量类。服务类调用支付宝接口,常量类保存接口地址。

  • 服务类如下:
using _SCscHero.Base.Help;
using _SCscHero.Model.System.Return;
using Aop.Api;
using Aop.Api.Domain;
using Aop.Api.Request;
using Aop.Api.Response;
using Newtonsoft.Json.Linq;
using System;
using static _SCscHero.Base.Constant.ThirdAppConfigConst;

namespace ThirdParty.Core.Alipay
{
    /// <summary>
    /// 支付宝第三方服务
    /// 第三方应用授权官方文档:https://opendocs.alipay.com/isv/10467/xldcyq
    /// alipay.open.auth.token.app(换取应用授权令牌)文档:https://opendocs.alipay.com/apis/api_9/alipay.open.auth.token.app
    /// </summary>
    public class AlipayServices
    {

        #region 换取授权访问令牌(alipay.system.oauth.token)
        /// <summary>
        /// 根据票据返回app_auth_token相关信息
        /// </summary>
        /// <param name="code">票据</param>
        /// <returns></returns>
        public static AlipaySystemOauthTokenResponse GetAliPayAppAuthTokenBYCode(string code)
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, ThridAppAlipayConst.APPID, ThridAppAlipayConst.APP_SECRET, "json", "1.0", "RSA2", ThridAppAlipayConst.ALI_PUBLIC_KEY, "utf-8", false);
            AlipaySystemOauthTokenRequest request = new AlipayOpenAuthTokenAppRequest();
            request.GrantType = "authorization_code";
            request.Code = code;
            request.RefreshToken = ThridAppAlipayConst.ALI_ACCESS_TOKEN_REFRESH;

            AlipaySystemOauthTokenResponse response = client.Execute(request);
            if (response.Code == "20000")
                return null;
            return response;
        }
        #endregion

        #region 支付宝会员授权信息查询接口(alipay.user.info.share)
        /// <summary>
        /// 根据Token返回支付宝用户基本信息
        /// </summary>
        /// <param name="token">Token</param>
        public static AliPayUserInfoReturn GetAliPayUserInfoBYToken(string token)
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, ThridAppAlipayConst.APPID, ThridAppAlipayConst.APP_SECRET, "json", "1.0", "RSA2", ThridAppAlipayConst.ALI_PUBLIC_KEY, "utf-8", false);
            AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
            AlipayUserInfoShareResponse response = client.Execute(request, token);
            return DTOConvertHelper.ConvertToModel<AlipayUserInfoShareResponse, AliPayUserInfoReturn>(response);
        }

        #endregion

        #region 身份认证初始化服务(alipay.user.certify.open.initialize)
        /// <summary>
        /// 身份认证初始化服务(alipay.user.certify.open.initialize)
        /// </summary>
        /// <param name="name">姓名</param>
        /// <param name="certNo">身份证号码</param>
        /// <returns></returns>
        public static string GetCertifyIDByNameAndCertNO(string name, string certNo)
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, ThridAppAlipayConst.APPID, ThridAppAlipayConst.APP_SECRET, "json", "1.0", "RSA2", ThridAppAlipayConst.ALI_PUBLIC_KEY, "utf-8", false);
            AlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest();
            JObject bizContent = new JObject();
            bizContent.Add("outer_order_no", $"SCscHero{DateTime.Now.ToString("yyyyMMddHHmmssfff")}012SCscHero");
            //商户请求的唯一标识,商户要保证其唯一性,值为32位长度的字母数字组合。建议:前面几位字符是商户自定义的简称,中间可以使用一段时间,后段可以使用一个随机或递增序列
            bizContent.Add("biz_code", "FACE");
            /*认证场景码。入参支持的认证场景码和商户签约的认证场景相关,取值如下:
            FACE:多因子人脸认证
            CERT_PHOTO:多因子证照认证
            CERT_PHOTO_FACE :多因子证照和人脸认证
            SMART_FACE:多因子快捷认证*/
            bizContent.Add("identity_param", new JObject(new JProperty("identity_type", "CERT_INFO"), new JProperty("cert_type", "IDENTITY_CARD"), new JProperty("cert_name", $"{name}"), new JProperty("cert_no", $"{certNo}")));
            /*需要验证的身份信息参数,格式为json,字段详细说明如下: 
            identity_type:身份信息参数类型,必填,必须传入CERT_INFO 
            cert_type:证件类型,必填,当前支持身份证,必须传入IDENTITY_CARD 
            cert_name:真实姓名,必填,填写需要验证的真实姓名 
            cert_no:证件号码,必填,填写需要验证的证件号码*/
            bizContent.Add("merchant_config", new JObject(new JProperty("return_url", $"{ThridAppAlipayConst.REDIRECT_URL}")));
            /*商户个性化配置,格式为json,详细支持的字段说明为: 
            return_url:需要回跳的目标地址,必填,一般指定为商户业务页面*/
            //"\"face_contrast_picture\":\"xydasf==\"" +   /*非必填。自定义人脸比对图片的base64编码格式的string字符串*/
            request.BizContent = bizContent.ToString();
            AlipayUserCertifyOpenInitializeResponse response = client.Execute(request);
            return response.CertifyId;
        }
        #endregion

        #region 身份认证开始认证(alipay.user.certify.open.certify)
        /// <summary>
        /// 身份认证开始认证(alipay.user.certify.open.certify)
        /// </summary>
        /// <param name="certifyId">认证ID</param>
        public static string GetSignByCertifyID(string certifyId)
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, ThridAppAlipayConst.APPID, ThridAppAlipayConst.APP_SECRET, "json", "1.0", "RSA2", ThridAppAlipayConst.APP_PUBLIC_KEY, "utf-8", false);
            AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest();
            request.BizContent = "{" +
            $"\"certify_id\":\"{certifyId}\"" +
            "  }";
            AlipayUserCertifyOpenCertifyResponse response = client.SdkExecute(request);
            return response.Body;
        }
        #endregion

        #region 身份认证记录查询(alipay.user.certify.open.query)
        /// <summary>
        /// 身份认证记录查询(alipay.user.certify.open.query)
        /// </summary>
        /// <param name="certifyId">认证ID</param>
        public static AlipayUserCertifyOpenQueryResponse GetCertiRecordByCertifyID(string certifyId)
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, ThridAppAlipayConst.APPID, ThridAppAlipayConst.APP_SECRET, "json", "1.0", "RSA2", ThridAppAlipayConst.ALI_PUBLIC_KEY, "utf-8", false);
            AlipayUserCertifyOpenQueryRequest request = new AlipayUserCertifyOpenQueryRequest();
            request.BizContent = "{" +
            $"\"certify_id\":\"{certifyId}\"" +
            "  }";
            AlipayUserCertifyOpenQueryResponse response = client.Execute(request);
            return response;
        }
        #endregion

//以下第三方接口未调通

        #region 芝麻企业征信基于身份的协议授权(alipay.user.auth.zhimaorg.identity.apply)
        public void GetAuthZhimaorgByAuthInfo()
        {
            IAopClient client = new DefaultAopClient(ThridAppAlipayConst.ALI_PUBLIC_API, "app_id", "merchant_private_key", "json", "1.0", "RSA2", "alipay_public_key", "GBK", false);
            AlipayUserAuthZhimaorgIdentityApplyRequest request = new AlipayUserAuthZhimaorgIdentityApplyRequest();
            request.BizContent = "{" +
            "\"cert_type\":\"NATIONAL_LEGAL\"," +//NATIONAL_LEGAL:营业执照号码/NATIONAL_LEGAL_MERGE:三证合一号码
            "\"cert_no\":\"330701199901011311\"," +//营业执照号码
            "\"name\":\"中国移动有限公司\"," +//企业名称
            "\"linked_merchant_id\":\"2088721630869411\"" +
            "}";
            AlipayUserAuthZhimaorgIdentityApplyResponse response = client.Execute(request);
            Console.WriteLine(response.Body);
        }
        #endregion

        #region 支付宝验证银行卡是否可用
        /// <summary>
        /// 支付宝验证银行卡是否可用
        /// </summary>
        /// <param name="cardNo">银行卡号</param>
        /// <returns></returns>
        public static VerifiedCardReturn GetBankCardIsWhatBank(string cardNo)
        {
            // 创建HttpClient实例       
            String url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8";
            url += "&cardBinCheck=true";
            Dictionary<string, string> headers = new Dictionary<String, String>();
            headers.Add("cardNo", cardNo);
            string verifiedCardStr = HttpHelp.Post(url, param);
            return JsonHelper.JSONToObject<VerifiedCardReturn>(verifiedCardStr);
        }
        #endregion
    }
}

  • 常量类如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace _SCscHero.Base.Constant
{
    /// <summary>
    /// 第三方应用配置常量类
    /// </summary>
    public class ThirdAppConfigConst
    {
        /// <summary>
        /// 微信授权常量
        /// </summary>
        public class ThirdAppWeChatConst
        {
            /// <summary>
            /// 授权接口地址
            /// </summary>
            public const string APP_CONNECT_URL = "https://open.weixin.qq.com/connect/qrconnect";
            /// <summary>
            /// 获取access_token的URL地址
            /// </summary>
            public const string APP_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
            /// <summary>
            /// 获取详细用户信息
            /// </summary>
            public const string APP_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo";
        }

        /// <summary>
        /// 支付宝授权常量
        /// </summary>
        public class ThridAppAlipayConst
        {
            /// <summary>
            /// oauth2授权
            /// </summary>
            public const string APP_CONNECT_URL = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?";
            /// <summary>
            /// app_auth_token
            /// </summary>
            public const string APP_AUTH_TOKEN = "alipay.open.auth.token.app";
            /// <summary>
            /// 支付宝通用接口
            /// </summary>
            public const string ALI_PUBLIC_API = @"https://openapi.alipay.com/gateway.do";
            /// <summary>
            /// 外部 H5 唤起支付宝客户端进行实名认证接口地址
            /// </summary>
            public const string ALI_ALIPAYAPP_AUTH = @"alipays://platformapi/startapp?appId=20000067&url=";
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33391499/article/details/105349456
今日推荐