閱讀需要: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=";
}
}
}