/**

*支付宝支付

* @param orderId 订单编号

* @param actualPay 实际支付金额

* @return

*/

private String getOrderInfoByAliPay(String orderId,float actualPay) {//回调页面

String ali_call_back_url = propertiesService.ALI_CALL_BACK_URL;

String seller_id = propertiesService.SELLER_ID;//商户编号

String[] parameters={

"service=\"mobile.securitypay.pay\"",//固定值(手机快捷支付)

"partner=\"2088421544444\"",//合作身份者ID(16位)"_input_charset=\"utf-8\"",

"notify_url=\""+ali_call_back_url+"\"",//通知地址

"out_trade_no=\""+orderId+"\"",//商户内部订单号

"subject=\"测试\"",//测试

"payment_type=\"1\"",//固定值

"seller_id=\""+seller_id+"\"",//账户邮箱

"total_fee=\""+"0.01"+"\"",//支付金额(元)

"body=\"订单说明\"",//订单说明"it_b_pay=\"30m\""(订单过期时间 30分钟过期无效)

};

String signOrderUrl = signAllString(parameters);

return signOrderUrl;

}/**

* 支付宝签名

* @param array

* @return

*/

private String signAllString(String [] array){

StringBuffer sb = new StringBuffer("");

for (int i = 0; i < array.length; i++) {

if(i==(array.length-1)){

sb.append(array[i]);

}else{

sb.append(array[i]+"&");

}

}

System.out.println(sb.toString());

String sign = "";

try {

sign = URLEncoder.encode(RSA.sign(sb.toString(), AlipayConfig.private_key, "utf-8"), "utf-8");//private_key私钥

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

sb.append("&sign=\""+sign+"\"&");

sb.append("sign_type=\"RSA\"");

return sb.toString();

}package com.alipay.sign;

import javax.crypto.Cipher;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;public class RSA{

public static final String SIGN_ALGORITHMS = "SHA1WithRSA";

/**

* RSA签名

* @param content 待签名数据

* @param privateKey 商户私钥

* @param input_charset 编码格式

* @return 签名值

*/

public static String sign(String content, String privateKey, String input_charset)

{

try

{

byte[] decode = Base64.decode(privateKey);

PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(decode );

KeyFactory keyf= KeyFactory.getInstance("RSA");

PrivateKey priKey= keyf.generatePrivate(priPKCS8);

java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);

signature.initSign(priKey);

signature.update( content.getBytes(input_charset) );

byte[] signed = signature.sign();

return Base64.encode(signed);

}

catch (Exception e)

{

e.printStackTrace();

}

return null;

}

/**

* RSA验签名检查

* @param content 待签名数据

* @param sign 签名值

* @param ali_public_key 支付宝公钥

* @param input_charset 编码格式

* @return 布尔值

*/

public static boolean verify(String content, String sign, String ali_public_key, String input_charset)

{

try

{

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

byte[] encodedKey = Base64.decode(ali_public_key);

PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));

java.security.Signature signature = java.security.Signature

.getInstance(SIGN_ALGORITHMS);

signature.initVerify(pubKey);

signature.update( content.getBytes(input_charset) );

boolean bverify = signature.verify( Base64.decode(sign) );

return bverify;

}

catch (Exception e)

{

e.printStackTrace();

}

return false;

}

/**

* 解密

* @param content 密文

* @param private_key 商户私钥

* @param input_charset 编码格式

* @return 解密后的字符串

*/

public static String decrypt(String content, String private_key, String input_charset) throws Exception {

PrivateKey prikey = getPrivateKey(private_key);

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, prikey);

InputStream ins = new ByteArrayInputStream(Base64.decode(content));

ByteArrayOutputStream writer = new ByteArrayOutputStream();

//rsa解密的字节大小最多是128,将需要解密的内容,按128位拆开解密

byte[] buf = new byte[128];

int bufl;

while ((bufl = ins.read(buf)) != -1) {

byte[] block = null;

if (buf.length == bufl) {

block = buf;

} else {

block = new byte[bufl];

for (int i = 0; i < bufl; i++) {

block[i] = buf[i];

}

}

writer.write(cipher.doFinal(block));

}

return new String(writer.toByteArray(), input_charset);

}

/**

* 得到私钥

* @param key 密钥字符串(经过base64编码)

* @throws Exception

*/

public static PrivateKey getPrivateKey(String key) throws Exception {

byte[] keyBytes;

keyBytes = Base64.decode(key);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

return privateKey;

}

}支付宝参数里面为什么要进行转义?主要是因为返回给移动的参数结果是springmvc进行返回的给移动端时,会认为"为结束,所以需要\"进行转义!

支付宝 java 签名_支付宝APP支付(Java后台生成签名具体步骤)相关推荐

  1. php微信生成签名_微信APP支付服务端PHP生成签名

    官网支付说明 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.参见[统一下单API]. 步 ...

  2. app支付宝支付java后台_支付宝app支付java后台流程demo

    支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...

  3. 支付宝APP支付Java服务端

    支付宝APP支付Java服务端: 公司项目要求对接支付宝进行支付功能,这边做出整理方便以后使用(支付宝的支付对接还是很简单的). 1):去支付宝开放平台,-1.注册账号,2.创建应用 3.配置应用 4 ...

  4. 支付宝app支付java后台流程demo

    支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...

  5. 微信手机app支付java

    java的uniapp版本的微信支付 准备工作 1.先准备企业账号,然后创建应用,如图所示 创建应用获取app支付 3.查看appid,AppSecret 2.根据官方文档生成公钥私钥 支付宝官方地址 ...

  6. 微信支付 APP支付 Java 服务器端

    微信支付 APP支付 Java 服务器端 本文介绍微信支付中APP支付的java服务端. 微信APP支付文档:https://pay.weixin.qq.com/wiki/doc/api/app/ap ...

  7. 微信APP支付-Java后台实现

    微信APP支付-Java后台实现 转自:http://blog.csdn.net/walle167/article/details/50957503 1 注册微信开放者平台 开发者平台地址:https ...

  8. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

    java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写      一.流程步骤          1.执行流程            当手机端app(就是你公司开发的app) ...

  9. java微信支付签名生成_微信APP支付(Java后台生成签名具体步骤)

    public class PayCommonUtil { //定义签名,微信根据参数字段的ASCII码值进行排序 加密签名,故使用SortMap进行参数排序 public static String ...

  10. 支付宝 java 签名算法_(支付宝)签名与验签

    # 签名与验签 更新时间:2017-06-13 # [](https://docs.open.alipay.com/#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0%E7%A ...

最新文章

  1. a byte of python-A Byte of Python PDF 下载
  2. Oracle配置OneMap中的sql数据库问题及解决方案
  3. 使用命令行建立Zend Framework项目
  4. Qt样例学习1(数字时钟)
  5. MySQL 索引分析除了 EXPLAIN 还有什么方法?
  6. php文件上传非法,ThinkPHP 3.2.3 版本上传文件出现“非法上传文件!”错误解决办法...
  7. SAP License:SAP ECC6安装系列三:关于SAP你也许想知道的一些事
  8. 使用webpack引入sass全局变量
  9. 阿里推出“阿里云网盘”App;Linux 发布 29 周年​| 极客头条
  10. iphone屏幕突然变暗_iPhone 屏幕突然变暗是什么原因?
  11. D-News|扎克伯格下月发布人工智能管家,美放宽无人机商用飞行标准
  12. 跨界 +赋能——互联网的下一个关键词
  13. Android studio 报错 Unknown host 'jcenter.bintray.com'
  14. linux中telnet工具,linux中telnet工具的介绍和使用
  15. 电子文档秒变手写文字:这个工具绝了!!
  16. 《Erlang/OTP并发编程实战》第八章 分布式 Erlang/OTP 简介
  17. 那些SAP项目里的主流外围系统
  18. mysql 分组之后 取分组之后最新的数据
  19. CDA数据分析师认证证书含金量不断提高,成数据分析入门新刚需!
  20. 网页数据抓取公式之京东商品数据抓取

热门文章

  1. plot函数--R语言
  2. 匿名留言板表白墙 小程序校园树洞带后台
  3. Java.I/O流编程一览笔录
  4. 阿里知产研究院报告:侵犯知识产权行为的罪与罚 | 湖畔新知汇
  5. 双十一大战前瞻:拼多多京东苏宁纷纷放大招,谁能挑战阿里C位?
  6. 加壳与脱壳知识点(持续更新)
  7. windows下Elasticsearch安装、ElasticSearch-head插件安装使用
  8. 裸辞两个月,海投一个月,从 Android 转战 Web 前端的求职之路
  9. 计算机网络之五:基本器件(网卡,集线器,交换机,路由器)
  10. VirtualBox下配置 Ubantu18.4 总纲领