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

这篇具有很好参考价值的文章主要介绍了医保移动支付加密解密请求工具封装【国密SM2SM4】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

一、项目背景

医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java
虽然过期了,但是我前期太忙了,没时间整理哦!

二、使用方法

  • 下载资料包解压后得到如下目录
    医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java
  • 配置文件说明【数据已脱敏处理】

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

医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

=================【支付宝测试环境配置说明】================================
小程序名称: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 端口请自行修改

    启动效果如下

    医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

三、接口调用

  • 支付宝加密接口

接口地址 /ali_encr_data
请求方式 POST

请求效果
医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

  • 支付宝解密接口

接口地址 /ali_decr_data
请求方式 POST

请求效果
医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

  • 微信加密

接口地址 /weichat_encr_data
请求方式 POST

请求效果
医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

  • 微信解密

接口地址 /weichat_decr_data
请求方式 POST

请求效果
医保移动支付加密解密请求工具封装【国密SM2SM4】,个人笔记,java

四、源码介绍

有兴趣的小伙伴可以下载源码整合到自己的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 {

   @Autowired
   private Ali configParams;
   private DataHandler dataHandler;
   private String message;

   @PostConstruct
   public 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.0
           String 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.0
           String 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 {



   @Autowired
   private Weichat configParams;
   private DataHandler dataHandler;
   private String message;

   @PostConstruct
   public 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.0
           String 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.0
           String 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】,个人笔记,java文章来源地址https://www.toymoban.com/news/detail-809939.html

到了这里,关于医保移动支付加密解密请求工具封装【国密SM2SM4】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot接口加密解密工具

    介绍(项目源码见文末!!!!!!) 在软件项目开发过程中,当需要对后端返回数据进行加密,或者前段向后端发送的数据时加密后的数据,那么在接收前就需要进行解密。本工具就是基于注解实现接口加密解密,使用非常方便。 在工具中,提供了多种加密和解密方式,

    2024年02月09日
    浏览(104)
  • 在线AES加密/解密工具

    在线AES加密/解密工具 http://lzltool.com/AES http://lzltool.com/AES

    2024年02月12日
    浏览(52)
  • Java常用的加密解密工具类

    在软件开发中,数据的安全性是一个重要的考虑因素。为了保护敏感数据,我们经常需要对数据进行加密和解密操作。为了简化加密解密操作,提高开发效率,我们可以使用一个常用的加密解密工具类。本文将介绍一个常用的 Java 加密解密工具类,并提供详细的使用说明和示

    2024年02月02日
    浏览(47)
  • 【教程】解决php微擎中的goto加密解密,一键解密工具

    今天,我将向大家揭秘一款神奇的工具——goto解密工具,轻松解密这个看似棘手的问题。 无数开发者都曾因为php中的goto功能而头疼不已。goto解密工具其中之一就是解密goto代码。通过精妙的算法和强大的解析能力,它能够解密被goto加密的代码段,使你能够清晰地理解代码的

    2024年02月11日
    浏览(77)
  • SpringCloud Gateway 整合RSA对请求参数解密、响应结果加密【SpringCloud系列10】

    本文章实现的是 网关中的 参数解密、响应数据体加密功能。 1 集成 commons-codec commons-codec 是Apache开源组织提供的用于摘要运算、编码解码的包。常见的编码解码工具Base64、MD5、Hex、SHA1、DES等。 本项目中集成RSA 非对称算法,RSAUtils 工具类 然后创建一个测试类,生成一组公钥

    2024年02月06日
    浏览(42)
  • Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java进行RSA加解密,本文介绍下使用当下流行的Hutool工具进行RSA加解密的用法。 目录 一、在Linux环境下生成公钥、私钥文件 二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记 三、po

    2024年04月23日
    浏览(105)
  • 一款实用的.NET Core加密解密工具类库

    在我们日常开发工作中,为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES,RSA,MD5,SAH1,SAH256,DES等,这时候假如我们有一个封装的对应加密解密工具类可以直接调用,那这样可以节省不少的开发时间。今天推荐一款实用的.NET Core加密解密工

    2024年01月23日
    浏览(134)
  • RSA加解密工具类(PKCS8公钥加密,PKCS1私钥解密)

    场景 :如果项目上生成的秘钥,公钥是PKCS8格式,私钥却是PKCS1格式。需要在这种场景加解密的话可以直接使用下面工具类。 特殊说明:私钥解密的时候必须把私钥源文件内容整个传入,不能删除私钥的文件头和文件尾,并且不能删除换行。

    2024年02月11日
    浏览(67)
  • .Net 加密解密组件工具类 System.Security.Cryptography.Algorith

            在.NET Framework出现之前,如果我们需要进行加密的话,我们只有各种较底层的技术可以选择,如Microsoft Crypto API、Crypto++、Openssl等等,其用法相当复杂。而在 .NET Framework中,这些复杂内容(原来独立的API和SDK)已经被封装合并在一个.NET框架类中,这对于程序开发人员

    2024年02月04日
    浏览(57)
  • Java:Hutool工具箱之Hutool-crypto加密解密

    文档 https://hutool.cn/docs/#/crypto/概述 重点单词: 摘自文档 依赖 以MD5 为例 以AES 加密为例 这里有个问题,如果秘钥长度不够16位,会报错 长度只能是16位,24位,32位 参考 https://toscode.gitee.com/dromara/hutool/issues/I4O1EB 以RSA为例

    2024年02月16日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包