一背景:
产品提出能否对接芝麻信用,获取征信情况。给了个账号登录芝麻信用网站。
二 申请应用
申请应用有两个必填项:回调地址,跟公钥。
环境配置
这里网站上环境配置教程。:
我本地开发是windows环境,所以先下载OpenSSL。
这里网上有两种教程,1最简单,下载Windows版本的就行:链接:http://slproweb.com/products/Win32OpenSSL.html
根据自己情况选择对应版本 就行,推荐稳定版:Win64 OpenSSL v1.1.0f
第2种需要自己下载Perl手动编译。太麻烦了不是重点。所以没有试,感兴趣的可以自己尝试下
生成公钥
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin %进入 OpenSSL 安装目录%
C:\OpenSSL-Win32\bin>openssl.exe %进入 OpenSSL 程序%
OpenSSL> genrsa -out rsa_private_key.pem 1024 %生成私钥%
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem %备注:Java 开发者需要将私钥转换成 PKCS8 格式%
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem %生成公钥%
OpenSSL> exit %退出 OpenSSL 程序%
注意:对于使用 Java 和 .NET 的开发者,将 pkcs8 在 console 中输出的私钥去除头行、尾行、回车换行和空格,作为开发者私钥,对于 PHP 的开发者来说,无需进行 pkcs8 命令行操作。
经过以上步骤,开发者可以在当前文件夹中(Windows 用户在 C:\OpenSSL-Win32\bin)看到 rsa_private_key.pem
和 rsa_public_key.pem
两个文件,前者为私钥,后者为公钥。开发者将私钥保留,将公钥提交给支付宝网关,用于信息加密及解密。以下为使用 OpenSSL 生成的私钥文件和公钥文件示例
三 验证接口:
import com.antgroup.zmxy.openplatform.api.DefaultZhimaClient;
import com.antgroup.zmxy.openplatform.api.FileItem;
import com.antgroup.zmxy.openplatform.api.ZhimaApiException;
import com.antgroup.zmxy.openplatform.api.request.ZhimaCreditWatchlistiiGetRequest;
import com.antgroup.zmxy.openplatform.api.response.ZhimaCreditWatchlistiiGetResponse;
public class TestZhimaCreditWatchlistiiGet {
//芝麻开放平台地址
private String gatewayUrl = "https://zmopenapi.zmxy.com.cn/openapi.do";
//商户应用 Id
private String appId = "***";
//商户 RSA 私钥
private String privateKey = "***";
//芝麻 RSA 公钥
private String zhimaPublicKey = "***";
public void testZhimaCreditWatchlistiiGet() {
ZhimaCreditWatchlistiiGetRequest req = new ZhimaCreditWatchlistiiGetRequest();
req.setChannel("apppc");
req.setPlatform("zmop");
req.setProductCode("w1010100100000000022");// 必要参数
req.setTransactionId("20160101175625659000000000001");// 必要参数
req.setOpenId("268810000007909449496");// 必要参数
DefaultZhimaClient client = new DefaultZhimaClient(gatewayUrl, appId, privateKey, zhimaPublicKey);
try {
ZhimaCreditWatchlistiiGetResponse response = client.execute(req);
System.out.println(response.isSuccess());
System.out.println(response.getErrorCode());
System.out.println(response.getErrorMessage());
} catch (ZhimaApiException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestZhimaCreditWatchlistiiGet result = new TestZhimaCreditWatchlistiiGet();
result.testZhimaCreditWatchlistiiGet();
}
}
这里替换下必要参数(私钥换成pcks8之后的,公钥用生成的),提示出问题了
ZMOP.decode_private_key_error
仔细看了下文档:
需要从这里复制公钥,这个公钥也是我们生成公钥之后pcks8的。
再试试:
看出来了,就是openID错误了,这个本来就是用了demo的。
验证了文档上说的,芝麻信用查用户征信第一步需要用户授权。根据授权后返回的openid 进行后续的查询。
************************************************
总结:跟PM反馈了情况,建议目前目标用户与芝麻信用交集不大的情况,不能作为主流程环节。
适合在APP端上加上H5的授权环节(非主流程),后续的可以通过接口根据openid来进行进一步查询。