阅读需要: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
{
///
/// 支付宝第三方服务
/// 第三方应用授权官方文档:https://opendocs.alipay.com/isv/10467/xldcyq
/// alipay.open.auth.token.app(换取应用授权令牌)文档:https://opendocs.alipay.com/apis/api_9/alipay.open.auth.token.app
///
public class AlipayServices
{
#region 换取授权访问令牌(alipay.system.oauth.token)
///
/// 根据票据返回app_auth_token相关信息
///
/// 票据
///
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)
///
/// 根据Token返回支付宝用户基本信息
///
/// Token
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)
///
/// 身份认证初始化服务(alipay.user.certify.open.initialize)
///
/// 姓名
/// 身份证号码
///
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)
///
/// 身份认证开始认证(alipay.user.certify.open.certify)
///
/// 认证ID
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)
///
/// 身份认证记录查询(alipay.user.certify.open.query)
///
/// 认证ID
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 支付宝验证银行卡是否可用
///
/// 支付宝验证银行卡是否可用
///
/// 银行卡号
///
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
{
///
/// 第三方应用配置常量类
///
public class ThirdAppConfigConst
{
///
/// 微信授权常量
///
public class ThirdAppWeChatConst
{
///
/// 授权接口地址
///
public const string APP_CONNECT_URL = "https://open.weixin.qq.com/connect/qrconnect";
///
/// 获取access_token的URL地址
///
public const string APP_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
///
/// 获取详细用户信息
///
public const string APP_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo";
}
///
/// 支付宝授权常量
///
public class ThridAppAlipayConst
{
///
/// oauth2授权
///
public const string APP_CONNECT_URL = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?";
///
/// app_auth_token
///
public const string APP_AUTH_TOKEN = "alipay.open.auth.token.app";
///
/// 支付宝通用接口
///
public const string ALI_PUBLIC_API = @"https://openapi.alipay.com/gateway.do";
///
/// 外部 H5 唤起支付宝客户端进行实名认证接口地址
///
public const string ALI_ALIPAYAPP_AUTH = @"alipays://platformapi/startapp?appId=20000067&url=";
}
}
}