医保移动支付加密解密请求工具封装【国密SM2SM4】

2024-01-21 03:12

本文主要是介绍医保移动支付加密解密请求工具封装【国密SM2SM4】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 医保移动支付加密解密请求工具封装
      • 一、项目背景
      • 二、使用方法
      • 三、接口调用
      • 四、源码介绍
      • 五、下载地址

医保移动支付加密解密请求工具封装

定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开发语各不相同,可能要有java的、c#的、python的、pb的、nodjs的、php的、还可能有Delphi的等。。。。很多开发语言在实现SM2签名SM4加密算法没有现成的库,让我等开发人员苦不堪言;鉴于此,本屌丝特意开发了这个小demo,可以直接使用http请求实现加密解密过程,让您不必为了实现加密解密过程而废寝忘食不得其解,该demo可同时支持微信和支付宝渠道的接入。

该demo为springboot开发导出的jar包,直接运行该jar包即可运行服务,请提前安装好ava8环境。文末提供网盘下载地址!

一、项目背景

image-20240120181915750
虽然过期了,但是我前期太忙了,没时间整理哦!

二、使用方法

  • 下载资料包解压后得到如下目录
    image-20240120184645999
  • 配置文件说明【数据已脱敏处理】

对照移动支付第三方渠道接入反馈单配置 config/application.yaml 文件

image-20240120203004924

=================【支付宝测试环境配置说明】================================
小程序名称:xxx医院
APPID:2021002000069869
PID:208800007461
org_app_id【定点医药机构小程序/H5应用ID】[appid]:1GD00000000000561E0
org_code【定点医药机构编码】:H341xxxxxxxx445
ol_biz_type_code【线上业务类型】:04107-医保移动支付业务 04106-线上身份核验业务
org_chnl_crtf_code【机构渠道认证编码】:BqK1kMStlhVDgN2000000000000000000swxWFS9blhtcf6EPJu
【定点医药机构小程序/H5应用名称】:安徽涵博健康集团医院-皖东医院
【数字密钥】[appSecret]:1GD2SB7D000000000000004F842
【渠道私钥】[privateKey]:ANNEIfrVuLzv000000000000000GpAxYHpi
【渠道公钥】[pubKey]:BNvtt6Vy5l2ozmsk00000000000000000000000000000000PbI4eMC7oDanfXnSf5PtSlN9g=
【平台公钥】[publickey]:BOIfzplFtfjtsMau00000000000000000000000000000000000000LclJij4jfRqs4q2nDcSEhpa/3cGJw=
定点机构编号:H3000000000045
  • 运行工具

    执行 java -jar ./ybydzd-enc.jar --server.port=8888 端口请自行修改

    启动效果如下

    image-20240120191456835

三、接口调用

  • 支付宝加密接口

接口地址 /ali_encr_data
请求方式 POST

请求效果
image-20240120192939097

  • 支付宝解密接口

接口地址 /ali_decr_data
请求方式 POST

请求效果
image-20240120193709902

  • 微信加密

接口地址 /weichat_encr_data
请求方式 POST

请求效果
在这里插入图片描述

  • 微信解密

接口地址 /weichat_decr_data
请求方式 POST

请求效果
image-20240120193532181

四、源码介绍

有兴趣的小伙伴可以下载源码整合到自己的java项目中,这样可以有效减少http请求。

  • 支付宝 AliProcessData.java
package com.abc.tresff;import com.abc.tresff.dao.Ali;
import com.abc.tresff.response.Resp;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.tencent.mip.DataHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;@RestController
public class AliProcessData {@Autowiredprivate Ali configParams;private DataHandler dataHandler;private String message;@PostConstructpublic void init(){// DataHandler dataHandler = DataHandler.newInstance(appId, appSecret, publicKey, privateKey); // 初始化try{message+=configParams.getAppid()+"\r\n"+configParams.getApp_secret()+"\r\n"+configParams.getPublic_key()+"\r\n"+configParams.getPrivate_key();dataHandler = DataHandler.newInstance (configParams.getAppid(), configParams.getApp_secret(), configParams.getPublic_key(),configParams.getPrivate_key());System.out.println("APPID:"+configParams.getAppid());System.out.println("APPsecret:"+configParams.getApp_secret());System.out.println("Publickey:"+configParams.getPublic_key());System.out.println("PrivateKey:"+configParams.getPrivate_key());}catch(Exception ex){//return Resp.error(500,"初始化对象发生了异常"+ex.getMessage());message += "初始化对象发生了异常"+ex.getMessage()+message;}}/** 加密函数处理中加密调用** */@RequestMapping(value = "/ali_encr_data",method= RequestMethod.POST)public Resp<JSONObject> EncrData(@RequestBody JSONObject json) {try{dataHandler.setVersion(configParams.getVersion()); // 可以根据需要修改版本号,默认是2.0.0String reqData = dataHandler.buildReqData(json);return Resp.success(JSON.parseObject(reqData));}catch(Exception ex){return Resp.error(500,"调用业务发生了异常"+ex.getMessage()+message);}}/** 加密函数处理中加密调用** */@RequestMapping(value = "/ali_deccr_data",method= RequestMethod.POST)public Resp<JSONObject> DecrData(@RequestBody JSONObject json){try{dataHandler.setVersion(configParams.getVersion()); // 可以根据需要修改版本号,默认是2.0.0String rspData = dataHandler.processRspData(json.toJSONString());return Resp.success(JSON.parseObject(rspData));}catch(Exception ex){return Resp.error(500,"调用业务发生了异常"+ex.getMessage());}}
}
  • 微信 WeichatProcessData.java
package com.abc.tresff;import com.abc.tresff.dao.Ali;
import com.abc.tresff.dao.Weichat;
import com.abc.tresff.response.Resp;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.tencent.mip.DataHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
public class WeichatProcessData {@Autowiredprivate Weichat configParams;private DataHandler dataHandler;private String message;@PostConstructpublic void init(){// DataHandler dataHandler = DataHandler.newInstance(appId, appSecret, publicKey, privateKey); // 初始化try{dataHandler = DataHandler.newInstance (configParams.getAppid(), configParams.getApp_secret(), configParams.getPublic_key(),configParams.getPrivate_key());}catch(Exception ex){//return Resp.error(500,"初始化对象发生了异常"+ex.getMessage());message = "初始化对象发生了异常"+ex.getMessage();}}/** 加密函数处理中加密调用** */@RequestMapping(value = "/weichat_encr_data",method= RequestMethod.POST)public Resp<JSONObject> EncrData(@RequestBody JSONObject json) {try{dataHandler.setVersion(configParams.getVersion()); // 可以根据需要修改版本号,默认是2.0.0String reqData = dataHandler.buildReqData(json);return Resp.success(JSON.parseObject(reqData));}catch(Exception ex){return Resp.error(500,"调用业务发生了异常"+ex.getMessage());}}/** 加密函数处理中加密调用** */@RequestMapping(value = "/weichat_deccr_data",method= RequestMethod.POST)public Resp<JSONObject> DecrData(@RequestBody JSONObject json){try{dataHandler.setVersion(configParams.getVersion()); // 可以根据需要修改版本号,默认是2.0.0String rspData = dataHandler.processRspData(json.toJSONString());return Resp.success(JSON.parseObject(rspData));}catch(Exception ex){return Resp.error(500,"调用业务发生了异常"+ex.getMessage());}}
}

五、下载地址

资源下载地址
链接:https://pan.baidu.com/s/1BYSPGRSGZsPJDP7HBQhqLA
提取码:s2mi

为什么我觉得很简单的内容要写这么久。写博客真是太苦了!

在这里插入图片描述

这篇关于医保移动支付加密解密请求工具封装【国密SM2SM4】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/628200

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和