赞
踩
今天在做支付宝芝麻实名认证,总结一下吧,争取一天记录一点 直到完事。
一、支付宝创建应用后会得到APP_ID、接着弄公钥、私钥以及前面方式(RSA、RSA2)。此处不多说。
二、开发
1、第一步初始化
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
https://img-blog.csdn.net/20170925235006766?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTQyOTU2MzAxMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里没什么说的,SIGN_TYPE注意下与自己的配置一样就可以了。
2、初始化后获取biz_no,为下一步拿到认证URL使用
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); ZhimaCustomerCertificationInitializeRequest request = new ZhimaCustomerCertificationInitializeRequest(); String bizContent = "{" + " \"transaction_id\":\"ZGYD201610252323000001234\"," + " \"product_code\":\"w1010100000000002978\"," + " \"biz_code\":\"FACE\"," + " \"identity_param\":\"{\\\"identity_type\\\":\\\"CERT_INFO\\\",\\\"cert_type\\\":\\\"IDENTITY_CARD\\\",\\\"cert_name\\\":\\\"收委\\\",\\\"cert_no\\\":\\\"260104197909275964\\\"}\"," + " \"ext_biz_param\":\"{}\"" + " }"; request.setBizContent(bizContent); ZhimaCustomerCertificationInitializeResponse response = alipayClient.execute(request); if (response.isSuccess()) { System.out.println("调用成功"); } else { System.out.println("调用失败"); }
接口文档:
https://docs.open.alipay.com/api_8/zhima.customer.certification.initialize
这里要注意一下transaction_id,它是不能重复的
product_code固定值
cert_name要认证的客户姓名
cert_no要认证的客户身份证号码
此时会拿到biz_no。
3、开始认证
// 获取alipay client AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); ZhimaCustomerCertificationCertifyRequest request = new ZhimaCustomerCertificationCertifyRequest(); // 设置业务参数,必须要biz_no request.setBizContent("{\"biz_no\":\"ZM201611103000000888800000733621\"}"); // 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议 // alipay://www.taobao.com 或者 alipays://www.taobao.com,分别对应http和https请求 // 设置业务参数,必须要biz_no request.setReturnUrl("alipays://www.taobao.com"); // 这里一定要使用GET模式 ZhimaCustomerCertificationCertifyResponse response = alipayClient.pageExecute(request, "GET"); // 从body中获取URL String url = response.getBody(); System.out.println("generateCertifyUrl url:" + url);
return_url String 否 256 HTTP/HTTPS开头字符串
调用后会返回一个url,这个url比较长,直接做成二维码导致识别成功几率特别低
解决办法:在自己的应用中生成一个短的url,在业务上将此url与支付宝返回的url对应上,将自己生成的url做成二维码供用户扫描,之后跳转到支付宝返回的url即可。
这样解决还有一个好处:
能够获取到用户扫描二维码的时机,因为用户扫脸认证后不点击页面按钮“返回”的时候,我们的服务器是无法收到验证结果的回调的,所以在用户扫脸时,可以起一个定时器用来查询当前用户实名认证状态(官方是这么推荐的)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。