.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=";
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章