医保移动支付加密解密请求工具封装【国密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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文评论:Chain-of-Note:增强检索增强语言模型的鲁棒性

英文原文地址&#xff1a;https://artgor.medium.com/paper-review-chain-of-note-enhancing-robustness-in-retrieval-augmented-language-models-3b4e7fce188a 2023 年 11 月 20 日 论文链接 检索增强语言模型&#xff08;RALM&#xff09;通过使用外部知识源来增强&#xff…

typing python 类型标注学习笔记

在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。 目录 简介为什么需要 Type hints typing常用类型typing初级语法typing基础语法默认参数及 Optional联合类型 (Union Type)类型别名 (Type Alias)子类型…

Jetbrains Writerside 使用教程

系列文章目录 前言 一、入门 Writerside 是基于 IntelliJ 平台的 JetBrains 集成开发环境。使用它可以编写、构建、测试和发布技术文档。 如果你想将 Writerside 作为另一个 JetBrains IDE 的插件&#xff0c;请参阅 Writerside 作为插件。 1.1 安装 Writerside&#xfeff;…

让uniapp小程序支持多色图标icon:iconfont-tools-cli

前景&#xff1a; uniapp开发小程序项目时&#xff0c;对于iconfont多色图标无法直接支持&#xff1b;若将多色icon下载引入项目则必须关注包体&#xff0c;若将图标放在oss或者哪里管理&#xff0c;加载又是一个问题&#xff0c;因此大多采用iconfont-tools工具&#xff0c;但…

Siemens-NXUG二次开发-导入与导出(可移除参数)prt文件[Python UF][20240121]

Siemens-NXUG二次开发-导入与导出&#xff08;可移除参数&#xff09;prt文件[Python UF][20240121] 1.python uf函数1.1 NXOpen.UF.Part.Import1.2 NXOpen.UF.Part.ImportPartModes1.3 NXOpen.UF.Group.AskGroupData1.4 NXOpen.UF.Obj.AskTypeAndSubtype1.5 NXOpen.UF.Part.Ex…

mariadb数据库从入门到精通

mariadb数据库的安装以及安全初始化 mariadb数据库的安装以及安全初始化 mariadb数据库的安装以及安全初始化一、实验前提二、mariadb数据库的安装三、mariadb数据库安全初始化3.1 设定数据库基本的安全初始化3.2关闭对外开放端口 系列文章目录一、查看数据库二、进入库并且查看…

竞赛保研 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

Flutter 与 Android原生 相互通信:BasicMessageChannel、MethodChannel、EventChannel

前言 本文主要讲解&#xff0c;使用不同的 Channel 让 Flutter 和 Android原生 进行通信&#xff0c;由于只是讲解两端通信&#xff0c;所以可视化效果不好&#xff1b; 不过我写了一篇专门讲解 Flutter 嵌入 Android原生View的文章 Flutter 页面嵌入 Android原生 View-CSDN…

第二课:BERT

文章目录 第二课&#xff1a;BERT1、学习总结&#xff1a;为什么要学习BERT&#xff1f;预训练模型的发展历程BERT结构BERT 输入BERT EmbeddingBERT 模型构建BERT self-attention 层BERT self-attention 输出层BERT feed-forward 层BERT 最后的Add&NormBERT EncoderBERT 输…

BlueBunny:基于低功耗蓝牙的Bash bunny命令控制C2框架

关于BlueBunny BlueBunny是一款功能强大的命令控制框架&#xff0c;该工具基于低功耗蓝牙实现数据通信&#xff0c;可以帮助广大研究人员直接通过蓝牙将控制指令发送给Bash Bunny。 什么是Bash Bunny Bash Bunny是一款类似于USB Rubber Ducky的多功能USB攻击工具&#xff08;…

Mysql 编译安装部署

Mysql 编译安装部署 环境&#xff1a; 172.20.26.198&#xff08;Centos7.6&#xff09; 源码安装Mysql-5.7 大概步骤如下&#xff1a; 1、上传mysql-5.7.28.tar.gz 、boost_1_59_0.tar 到/usr/src 目录下 2、安装依赖 3、cmake 4、make && make install 5、…

MyBatis 系列:MyBatis 源码环境搭建

文章目录 一、环境准备二、下载 MyBatis 源码和 MyBatis-Parent 源码三、创建空项目、导入项目四、编译 mybatis-parent五、编译 mybatis六、测试总结 一、环境准备 jdk&#xff1a;17 maven&#xff1a;3.9.5 二、下载 MyBatis 源码和 MyBatis-Parent 源码 Mybatis&#x…