alipay 证书 java_支付宝 APP支付(证书)方式遇到的问题和解决办法
最近在做支付宝的支付功能,遇到了一些问题记录一下,方便查阅和遇到同样问题的人;
这个错误遇到的应该都比较多吧;
这个问题发生的原因是:
1.私钥是用文件路径方式请求的(建议使用密文方式) 并且 keyFromFile = false ;
2.私钥的获取方式不正确 (正确的是:开发者工具生成后 -> 打开文件位置 ->私钥);
3.获取CSR 文件时没注意看的话,就默认选择了PKCS8 导致错误;
//如果使用 文件方式报错的话,请参考下方案
1.将 开发者工具中 ->打开文件中 获得的私钥文件,增加头部和尾部字符串如下方格式:
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAhIHUPlqp26ye5kYiWYmOAcVLOliusADxzjNx/bXQFnOBNnkX+aTxOrHkiccd13EAHo10wnHiCYrxKpLS0jSL9puDdOYID1F9ZzZs9O3NN3BQpSx2zKJV4t1QjSVleUkSvXEZ9zIZvksPDOM8fMFiuJKeBsLj2eRrsRqx8GA5jUYkKzdXgyheDAM8tMdEaWJAdE4NN/HIdPg/QIwwju5Q44t9stHLB1FWoffNgyLsbFTe3LLAB25gJfVb592JUtP/hpp2ouOpa9p3hrlN8u2kFsQQb4MFLjS3pen5q6TP/FOZkIltdSnroGDnRlv81CyXG89Qoe24VhMJ/lMNKhPDjwIDAQABAoIBABVRjgQ6MfnV2/rQbdZZ+y7tvxy0B+bpP/4c6MoY5lG2Y6OP9/uCPg1jcZF5JQ4KV+HO3Z/oMMjpsZZ1r0BwWMEdD6jTbixILw8VKCHzG7cKIEvX+QM+uu45xuwKNRc3tC/8WeqnTkBpzV3myMEPxocLWfu5I0+eDYsg7Aheqad1hBuoe11fj00ZaZmmMX860sCJzPnfOTUuZs7ypF7g8dW7JJr0DcEF34ePA1SGa9GWTjzi/DdAlE+DvyPh1OiWZHfY1JVYESC/M4t+oRezRRTC7+OOvjod6JHJZw9HVw4UKhYOFTpX5awHFQoYECgYEAxZdx1luCTmG1Hfr6njA7EQl4VVihEOgrEOw6jhKc1Y/WtXk56MDkGnWdpyqpkEh3PR9eNtaF2DSBPgE1+pA1YmuGRgZCW+gvRVUavhIgkYvxxOwyP+yxAKaOwBY03qR/XsZB7v9x8X5P0cDeZWqYWR7DzK2vvWRtqcu2BkXZi8UCgYEAq60ude+y2gJ5Vb8s6zCLS+TN5s+Oamd/7qZpdrM1fPYHXH6/XftAsD9bKHCQJM2AlfaL0wIpXh8EmM0whNZ5gBE7z3Ja6l5WB4q/i5UvHEPQMJd+hEQRDJieHRkDra6eGsuHlDT6/WI/XblHUw2SbHMCawHGPz+eN7+e/5srY0MCgYBIadIsbuj4dNJ9pEdIxgA/pCrXjF2q5osx7oEfJC8aDVbwtvbEGD0AfW5Dn1z5JbWdTuumSURQEh3zbVos88C8yw8whoa3TAZW8HOWiOoqrRDzzGQ2DTZpOKFEQF8r4TlUsG/lePR3PoVeJ8LZhBFFSAMV9elcDXwrKB8TeXHayQKBgDTHRSVUz7NeV1cZMwILJofqi7KN1Ma5kwcXegzYA3WrXY/+F28ZM0X79FZ2ZJor44A3D72LSJR7DLq9OlFcbnYE1lJsYa7z2Zbv/Ps4ngcegf6uVGLtWiB5OwLPEeZvbIPoVoIl15PWhIyXzWmnHoDgyrmDDiObt1SEQKlsVuZpAoGAWnAamD63DfRc4zqmqGPTVttA84fOf+q2o7NGfhhyo0nFiZZbes5OJpB2ay81gvNYH0x84sanu2U+bGDXHRCAxKzaqByxCZV3/uKHS3l0S4c3lXwaScqbfLKUxDpqQSdI4VuxHLr4XrWW0WPi2YlbWTy3T4Y14GAgd9qPuLGMn5I=
-----END RSA PRIVATE KEY-----
2.
//官方skd源码返回秘钥base64密文
SDK源码地址:https://openhome.alipay.com/doc/sdkDownload.resource?sdkType=NET
private static byte[] GetPem(string type, byte[] data)
{string pem =Encoding.UTF8.GetString(data);string header = String.Format("-----BEGIN {0}-----\\n", type); //官方这里是 \\n 请注意如果自己的秘钥文件中有换行则改为 \r\n
string footer = String.Format("-----END {0}-----", type);int start = pem.IndexOf(header, StringComparison.Ordinal) +header.Length;int end = pem.IndexOf(footer, start, StringComparison.Ordinal); //如 秘钥文件中 没有出现 头部和底部的(-----BEGIN RSA PRIVATE KEY----- 和 -----END RSA PRIVATE KEY-----) ,则end = -1 导致下面的 (end - start )报错
string base64 = pem.Substring(start, (end - start)); //这里会出错
returnConvert.FromBase64String(base64);
}
另外如果秘钥错误可能和生成时有关系,请看如下步骤
下载支付宝开发者签名工具,具体使用方式可以参考支付宝流程;
网址:https://docs.open.alipay.com/291/106097/
注意事项: 生成CSR文件的时候,注意勾选 PKCS1 方式,(默认勾选的是 pkcs8) 这也是我没仔细看,遇到第一个坑,导致程序一直报 私钥格式不正确
然后上传到支付宝的应用环境中;
证书文件都拷贝到自己的程序目录中 ,在下方代码 设置证书相关参数时 使用;
static void Main(string[] args)
{var path = AppContext.BaseDirectory + "key/";string APP_PRIVATE_KEY = "私钥字符串或路径";注意:这里的私钥,是从开发者工具->打开文件夹->获取的私钥
//设置证书相关参数
CertParams certParams = newCertParams
{
AlipayPublicCertPath= path + "appCertPublicKey_2016101900724029.crt", //支付宝公钥证书储存本地路径
AppCertPath = path + "alipayCertPublicKey_RSA2.crt", //商户证书储存本地路径
RootCertPath = path + "alipayRootCert.crt", //支付宝根证书储存本地路径
};
IAopClient client= newDefaultAopClient("https://openapi.alipaydev.com/gateway.do",//支付宝网关,我这里是沙箱环境,正式环境请去除 dev
"2016101900724029",//APPID
APP_PRIVATE_KEY, //秘钥 ,我这里是给的密文,如果给路径下面的 keyFromFile 传入 true
"json",//请求格式
"1.0",//版本
"RSA2",//校验加密方式 如果提是RSA则这里填写RSA
"utf-8", //请求报文的内容字符集格式
false,//这里需要注意,如果设置为true 则 APP_PRIVATE_KEY 应为 私钥的物理路径 false 则应为 密文字符串
certParams);//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.open.public.template.message.industry.modify
AlipayTradeAppPayRequest request = newAlipayTradeAppPayRequest();
AlipayTradeAppPayModel model= new AlipayTradeAppPayModel();//创建订单的实体类
model.Body = "我是测试数据";//支付内容
model.Subject = "App支付测试DoNet"; //支付标题
model.TotalAmount = "0.01";//价格
model.ProductCode = "QUICK_MSECURITY_PAY";//这里是请求的方式,参看支付宝文档
model.OutTradeNo = "202002023test";//平台订单号
model.TimeoutExpress = "30m";//支付超时时间
request.SetBizModel(model);
AlipayTradeAppPayResponse response=client.SdkExecute(request);//调用成功,则处理业务逻辑
if(response.IsError)
{//Console.WriteLine(response.Msg);
}
Console.WriteLine(HttpUtility.HtmlEncode(response.Body));//这里返回的内容,就是支付宝APP拉起支付需要用到的字符串
Console.ReadKey();
正常则返回一串APP支付需要用到的内容;
OVER ;
alipay 证书 java_支付宝 APP支付(证书)方式遇到的问题和解决办法相关推荐
- java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式
一. 添加maven依赖 sdk <dependency><groupId>com.alipay.sdk</groupId><artifactId>al ...
- 支付宝 APP支付(证书)方式遇到的问题和解决办法
支付宝 APP支付(证书)方式遇到的问题和解决办法 参考文章: (1)支付宝 APP支付(证书)方式遇到的问题和解决办法 (2)https://www.cnblogs.com/fubing/p/121 ...
- aliPay支付宝APP支付操作流程
[TOC] aliPay支付宝APP支付操作流程 1 注册帐号&官方文档解析 在支付宝商家中心注册帐号,已经拥有支付宝帐号的用户,直接登录商家中心即可(同一个支付宝帐号,可以既是买家也是商家) ...
- php跳转支付宝支付宝支付宝支付,PHP服务端支付宝APP支付
1.配置参数 'alipay'=>array( //手机支付配置 //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //合作身份者id,以2088开头的16位纯数字 ...
- 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)
java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写 一.流程步骤 1.执行流程 当手机端app(就是你公司开发的app) ...
- java后端实现集成支付宝APP支付(沙箱环境)
沙箱环境集成支付宝APP支付后端实现 前言 获取支付宝相关信息 整体开发流程 1.获取核心参数 2.将支付宝SDK集成到项目中 3.后台使用支付宝SDK与支付宝进行交互逻辑 1.将支付宝公共信息参数写 ...
- fastadmin 微信支付宝整合插件 支付宝APP支付 ALIN10146
1.调试微信支付宝整合插件支付宝APP支付,支付宝支付一直报错 ALIN10146调了6个小时 我使用的是 微信支付宝整合插件,以下为我调用支付的代码 $params = ['amount'=> ...
- 支付宝app支付功能-服务端的实现-python3版
支付宝app支付功能-服务端的实现-python3版 一:需求说明 二:支付宝app支付处理流程 三:所需依赖 3.1 依赖库 3.2 支付配置 3.2.1 沙箱环境配置 3.2.2 正式环境配置 四 ...
- 支付宝APP支付Java服务端
支付宝APP支付Java服务端: 公司项目要求对接支付宝进行支付功能,这边做出整理方便以后使用(支付宝的支付对接还是很简单的). 1):去支付宝开放平台,-1.注册账号,2.创建应用 3.配置应用 4 ...
最新文章
- 连分数中一个有意思的小玩意儿
- Element UI——布局容器el-container子元素强制上下排列
- 【PAT甲级 BigInteger运算】1024 Palindromic Number (25 分) Java 全部AC
- python中df占位符_PYTHON 中的%s %占位符用法
- 高程加密lisp程序_lisp修改,怎么把这个加密程序那句去掉,小白求大神帮帮我...
- 银行内鬼程序员曝光:服务器植病毒,ATM取款717万,账户余额还不变
- RabbitMQ入门教程
- dev gridcontrol 单元格内容复制_Excel中的复制粘贴,不只是你想的那么简单的
- 【Redis笔记】数据结构和对象:字典
- AD+邮件服务器搭建方案
- 指向类成员的指针并非指针
- python程序设计课程设计二级减速器_2020中国大学mooc《高级语言程序设计(Python)CAP》答案在线查题2020知到《数据库...
- 百度地图标记点加点击事件和鼠标移入事件并添加数据
- mac 麦克风等权限添加应用操作手册
- MATLAB 汉化补丁下载
- 棋圣高调搬弄名人日本棋圣挟五冠搬弄对手
- 【STM32 .Net MF开发板学习-02】GPIO测试
- 紫光展锐面试——软件岗
- 读书笔记:《枪炮、病菌与钢铁》与《1984》
- matlab求级数求和,实验七_matlab求解级数有关计算