当前位置:   article > 正文

支付宝生活号对接-----(三)芝麻认证_biz no

biz no

记录一下支付宝认证过程

 如果要认证 , 必须要有身份证,和姓名 , 可以通过不同的途径获取, 也可以通过授权获取,也可以通过h5获取

参考支付宝API :https://docs.open.alipay.com/271/dz10yd

  1. 调用certification.initialize接口进行认证初始化,并获取返回值biz_no。biz_no是本次认证的标识,在后面的认证接口和查询接口会用到。
  2. 跳转到certification.certify页面接口让用户完成认证,用户完成认证后会跳转回商户回调地址。这个接口支持多种方式接入,可以灵活使用。在这个接口的请求中传入return_url才能回跳到商户,return_url也支持多个协议,可以按照需要使用。
  3. 根据第一步返回的biz_no查询本次认证的结果,结果以查询接口返回的结果为准。

最主要的是明白 回调地址中怎么能获取到biz_no 因为api 上也没有写在回调地址中 怎么获取biz_no 所以我自己用的EhCache

来做一个缓存

第一步 初始化

  1. AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
  2. ZhimaCustomerCertificationInitializeRequest request = new ZhimaCustomerCertificationInitializeRequest();
  3. String bizContent = "{"
  4. + "\"transaction_id\":\"ZGYD201610252323000001234\","
  5. + "\"product_code\":\"w1010100000000002978\","
  6. + "\"biz_code\":\"FACE\","
  7. + "\"identity_param\":\"{\\\"identity_type\\\":\\\"CERT_INFO\\\",\\\"cert_type\\\":\\\"IDENTITY_CARD\\\",\\\"cert_name\\\":\\\"张三\\\",\\\"cert_no\\\":\\\"260104197909275964\\\"}\","
  8. + "\"ext_biz_param\":\"{}\"" + " }";
  9. request.setBizContent(bizContent);
  10. ZhimaCustomerCertificationInitializeResponse response = alipayClient.execute(request);
  11. if (response.isSuccess()) {
  12. System.out.println("调用成功");
  13. // 这里应该可以通过 respone 获取 biz_no
  14. } else {
  15. System.out.println("调用失败");
  16. }

第二步生成 url

  1. // 获取alipay client
  2. AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
  3. ZhimaCustomerCertificationCertifyRequest request = new ZhimaCustomerCertificationCertifyRequest();
  4. // 设置业务参数,必须要biz_no
  5. request.setBizContent("{\"biz_no\":\"ZM201611103000000888800000733621\"}");
  6. // 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议
  7. // alipay://www.taobao.com 或者 alipays://www.taobao.com,分别对应http和https请求
  8. //****** 我自己在这个做了处理 在路径后面传了一个uuid 然后通过uuid 去获取biz_no
  9. String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
  10. request.setReturnUrl("alipays://www.app.cn/getBizNo?uuid="+uuid);
  11. //*** 使用缓存吧uuid 和 biz_no 存起来
  12. //存储
  13. EhCacheCacheManager cacheCacheManager=ApplicationContextUtils.applicationContext.getBean(EhCacheCacheManager.class);
  14. //获取CacheManager类
  15. CacheManager cacheManager=cacheCacheManager.getCacheManager();
  16. Cache cache=cacheManager.getCache("SystemCache");
  17. cache.put(new Element(uuid, certifyId));
  18. // 这里一定要使用GET模式
  19. ZhimaCustomerCertificationCertifyResponse response = alipayClient.pageExecute(request, "GET");
  20. // 从body中获取URL
  21. String url = response.getBody();
  22. System.out.println("generateCertifyUrl url:" + url);

第三步 验证 :

  1. @RequestMapping(value = "/getBizNo")
  2. public String getMesg(HttpServletRequest request, HttpServletResponse response) throws Exception {
  3. String uuid=request.getParameter("uuid");
  4. String furl="";
  5. //获取
  6. EhCacheCacheManager cacheCacheManager=ApplicationContextUtils.applicationContext.getBean(EhCacheCacheManager.class);
  7. //获取CacheManager类
  8. CacheManager cacheManager=cacheCacheManager.getCacheManager();
  9. Cache cache=cacheManager.getCache("SystemCache");
  10. String biz_no= (String)cache.get(uuid).getObjectValue();
  11. AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
  12. AlipayServiceEnvConstantsfs.APP_ID,
  13. AlipayServiceEnvConstantsfs.PRIVATE_KEY, "json", AlipayServiceEnvConstantsfs.CHARSET, AlipayServiceEnvConstantsfs.ALIPAY_PUBLIC_KEY, "RSA2");
  14. AlipayUserCertifyOpenQueryRequest userRequest = new AlipayUserCertifyOpenQueryRequest();
  15. userRequest.setBizContent("{" +
  16. "\"biz_no\":\""+biz_no+"\"" +
  17. " }");
  18. AlipayUserCertifyOpenQueryResponse userResponse = alipayClient.execute(userRequest);
  19. if(userResponse.isSuccess()) {
  20. String body = userResponse.getBody();
  21. JSONObject obiect = JSONObject.parseObject(body);
  22. JSONObject alipay_user = obiect.getJSONObject("alipay_user_certify_open_query_response");
  23. String passed = alipay_user.getString("passed");
  24. System.out.println("认证结果=============="+passed);
  25. if(passed.equals("F")) {
  26. mesg=false;
  27. }else if(passed.equals("T")){
  28. mesg=true;
  29. }else {
  30. mesg=false;
  31. }
  32. }else {
  33. mesg=false;
  34. }
  35. //清除缓存
  36. cache.remove(uuid);
  37. furl="你想调回的地址"
  38. return furl;
  39. }

 大概就是这样写的, 非常的简单, 就是研究起来有点头皮发麻....肝肠寸断..

 

 

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号