yml配置文件:

alipay:APP_ID: 2021001166634591APP_PRIVATE_KEY: ALIPAY_PUBLIC_KEY:

maven依赖:

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.10.58.ALL</version></dependency>

service层(就不写接口了,省时间):

package com.gkl1120.alipayConfirm;import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayUserCertifyOpenCertifyRequest;
import com.alipay.api.request.AlipayUserCertifyOpenInitializeRequest;
import com.alipay.api.request.AlipayUserCertifyOpenQueryRequest;
import com.alipay.api.response.AlipayUserCertifyOpenCertifyResponse;
import com.alipay.api.response.AlipayUserCertifyOpenInitializeResponse;
import com.alipay.api.response.AlipayUserCertifyOpenQueryResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.Map;
import java.util.UUID;/*** @author ctx_gao kailong* @date 2020/7/17 10:41* @describe*/
@Service
public class ConfirmService {@Value("${alipay.APP_ID}")private String APP_ID;@Value("${alipay.APP_PRIVATE_KEY}")private String APP_PRIVATE_KEY;@Value("${alipay.ALIPAY_PUBLIC_KEY}")private String ALIPAY_PUBLIC_KEY;//第一步:获取认证idpublic String getCertifyId(String name , String idno) {AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");AlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest();//构造身份信息json对象JSONObject identityObj = new JSONObject();//身份类型,必填,详细取值范围请参考接口文档说明identityObj.put("identity_type", "CERT_INFO");//证件类型,必填,详细取值范围请参考接口文档说明identityObj.put("cert_type", "IDENTITY_CARD");//真实姓名,必填identityObj.put("cert_name", name);//证件号码,必填identityObj.put("cert_no", idno);//构造商户配置json对象JSONObject merchantConfigObj = new JSONObject();// 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议,参考下面的案例:appId用固定值 20000067,url替换为urlEncode后的业务回跳地址merchantConfigObj.put("return_url", "alipays://platformapi/startapp?appId=20000067&url=https://wwww.baidu.com");//构造身份认证初始化服务业务参数数据JSONObject bizContentObj = new JSONObject();//商户请求的唯一标识,推荐为uuid,必填UUID uuid = UUID.randomUUID();bizContentObj.put("outer_order_no", uuid);bizContentObj.put("biz_code", "SMART_FACE");bizContentObj.put("identity_param", identityObj);bizContentObj.put("merchant_config", merchantConfigObj);request.setBizContent(bizContentObj.toString());//发起请求AlipayUserCertifyOpenInitializeResponse response = null;try {response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}String certifyId = "";if (response.isSuccess()) {System.out.println("调用成功");//接口调用成功,从返回对象中获取certify_idcertifyId = response.getCertifyId();//执行后续流程...System.out.println("certifyId为:" + certifyId);} else {System.out.println("调用失败");}return certifyId;}//第二步:根据第一步拿到的认证id获取url,url给前端进行认证public String getUrlByCertifyId(String certifyId) {//参考代码如下://获取alipay clientAlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest();//设置certifyIdJSONObject bizContentObj = new JSONObject();bizContentObj.put("certify_id", certifyId);request.setBizContent(bizContentObj.toString());//生成请求链接,这里一定要使用GET模式AlipayUserCertifyOpenCertifyResponse response = null;try {response = alipayClient.pageExecute(request, "GET");} catch (AlipayApiException e) {e.printStackTrace();}String certifyUrl = "";if (response.isSuccess()) {System.out.println("开始认证服务调用成功");certifyUrl = response.getBody();//执行后续流程...System.out.println("certifyUrl为:" + certifyUrl);} else {throw new RuntimeException("获取certifyUrl失败!");}return certifyUrl;}//根据认证id查询返回数据public AlipayUserCertifyOpenQueryResponse getResponse(String certifyId) {AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID,APP_PRIVATE_KEY,"json","UTF-8",ALIPAY_PUBLIC_KEY,"RSA2");AlipayUserCertifyOpenQueryRequest request = new AlipayUserCertifyOpenQueryRequest();request.setBizContent("{" +"\"certify_id\": "+"\"" + certifyId + "\"" +"  }");AlipayUserCertifyOpenQueryResponse response = null;try {response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}if(response.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}return response;}//判断是否通过实名认证(回调使用,认证完前端请求接口把姓名与身份证号作为参数传过来,如果返回true保存到数据库,返回false则姓名或身份证号有误认证失败)public boolean ifPassed(String certifyId) {AlipayUserCertifyOpenQueryResponse response = getResponse(certifyId);if(response.getCode().equals("10000")) {String body = response.getBody();JSONObject jsonObject = JSONObject.parseObject(body);Map<String , Object> map = (Map<String, Object>) jsonObject.get("alipay_user_certify_open_query_response");if(map.get("passed").equals("T")) {System.out.println("认证成功!");return true;} else if(map.get("passed").equals("F")) {System.out.println("认证失败!");return false;} else{System.out.println("系统异常!");return false;}} else {throw new RuntimeException("certifyId不合法或网络异常,请稍后再试!");}}
}

controller层:

package com.gkl1120.alipayConfirm;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author ctx_gao kailong* @date 2020/7/17 11:07* @describe 7c184ef960c5661f1e54e7d799e9cda3   本商户通过验证的certifyId*/
@RestController
@RequestMapping("test")
public class ConfirmController {@Autowiredprivate ConfirmService confirmService;@GetMapping("/init")public void init() {String certifyId = confirmService.getCertifyId("", "");String urlBycertifyId = confirmService.getUrlByCertifyId(certifyId);System.out.println(certifyId);System.out.println(urlBycertifyId);}@GetMapping("/response")public boolean response() {boolean b = confirmService.ifPassed("7c184ef960c5661f1e54e7d799e9cda3");System.out.println("b:" + b);return b;}}

init执行结果:

调用成功
certifyId为:..................
开始认证服务调用成功
certifyUrl为:https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-java-..............................

response执行结果:

调用成功
认证成功!
b:true

基于springboot的手机app端支付宝实名认证相关推荐

  1. 基于spring-boot+uni-app实现app支付功能(微信/支付宝)服务端

    基于spring-boot+uni-app实现app支付功能(微信/支付宝)服务端 支付宝支付 1 准备工作 申请支付能力 接口加签方式 2代码 依赖 支付宝支付配置类 支付宝控制层 异步通知 微信支 ...

  2. 下拉词(浏览器下拉)及手机APP端下拉联想推荐词的展示规则

    各大是搜索引擎(百度.360.搜狗.神马)下拉词(浏览器下拉)及手机APP端下拉联系推荐词的展示规则是什么呢? 首先,我们要了解到一个下拉词的组成部分有关键词(A)和后缀词(B)组成,关键词简单说就是 ...

  3. Dynamics 365Online 如何在手机app端获取当前位置的GPS信息

    众所周知365自带的手机app端是很弱的,但再弱还是聊胜于无,至少还是可以用的,而且功能也在不断的加强中. 本篇要分享的是如果使用SDK中开放的API,在手机端app中调用GPS信息,代码很简单 va ...

  4. 计算机毕业设计springboot基于Springboot的手机电商网站lmo47源码+系统+程序+lw文档+部署

    计算机毕业设计springboot基于Springboot的手机电商网站lmo47源码+系统+程序+lw文档+部署 计算机毕业设计springboot基于Springboot的手机电商网站lmo47源 ...

  5. 手机APP使用支付宝支付(服务端)

    最近本人刚做了手机APP支付宝支付功能,主要分为六步,在这里主要记录代码部分. 第一步:创建应用并获取APPID 要在您的应用中接入支付宝App支付能力,需要通过创建应用的方式接入蚂蚁相关接口并进行开 ...

  6. ADB测试,手机app端,常用指令

    一.app项目 灰度发布 所谓灰度发布,就是在发布生成环境过程当中,先发布其中几台服务器,如果这几天服务器功能运行一段时间后能够正常,name再把其他未升级或者未发布的服务器进行生成环境发布:如果先发 ...

  7. 手机网页端支付宝支付

    手机网页端支付开发文档:https://docs.open.alipay.com/203/105285/ 第一步:进入蚂蚁金服(https://openhome.alipay.com),创建应用,提交 ...

  8. 基于ESP32CAM的手机app控制的图传小车

    ESP32CAM 文章目录 ESP32CAM 前言 一.准备 二.完整代码 前言 昨天做了图传,今天就想做个小车玩玩,说干就干 一.准备 你需要一个ESP32CAM.一个L298N,一辆小车,还有一块 ...

  9. 基于Springboot+mysql手机商城(带后台管理系统)

    项目描述 Springboot+mysql手机商城(带后台管理系统) 运行环境 jdk8+mysql+IntelliJ IDEA+maven 项目技术 springboot+mysql+mybatis ...

最新文章

  1. visualVM 安装使用
  2. Nginx可以做什么?看完这篇你就懂了
  3. 如何改变“便宜没好货”的这类用户心理?
  4. android 请求网络异步载入
  5. Spring Boot-springbootHelloword(一)
  6. 剑指offer_输入n个整数,找出其中最小的K个数
  7. 图像直方图及均衡方法总结(二)自适应直方图均衡AHE,CLAHE
  8. C语音--static变量
  9. iPhone5s 等 64位真机 运行 带有百度地图等 仅支持32位系统API和SDK的问题
  10. ThinkPHP5 引入 Go AOP
  11. CMD和AMD的区别
  12. python 方波信号_python实现周期方波信号频谱图
  13. java实现学生信息管理系统
  14. 0640与6130的区别_达人评测熊猫6143收音机与6130有区别没有?使用哪个好?使用四周后体验分享...
  15. 《电子元器件的可靠性》——2.3节可靠性基本术语和主要特征量
  16. CSS如何实现内凹角效果
  17. 凶残的挖矿脚本,奴役我数千机器!
  18. Final Cut Pro X 10.4.8 Apple出品的专业视频非线性编辑软件
  19. opencv 解决ippicv下载慢的问题: ippicv_2019_lnx_intel64_general_20180723
  20. 员工、老板、投资人,是这么看寒冬裁员的...

热门文章

  1. 从SEO角度看开发人员需要做的代码技术
  2. 聚合支付的优势在哪里
  3. matlab实现cqt频谱,LPCC、MFCC和CQCC简介及matlab实现
  4. android霍尔功能,android手机霍尔开关的引见
  5. Angular 中 web worker的使用
  6. SQL语句相关概念及练习
  7. C#实现快速排序(通俗易懂)
  8. qlabel 边加载边更新_四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
  9. 【iOS 开发】时间选择器控件 UIDatePicker
  10. gis投影中未定义的地理转换_ArcGIS中的坐标系统定义与投影转换(转)