作者: 玉龙      版权所有,允许转载, 请注明出处(创建金融_玉龙  http://www.weibo.com/u/1872245125

原文地址: http://blog.csdn.net/yehuijun/article/details/24780119

支付宝的公众账号文档地址 http://open.alipay.com/index.htm

要开通支付宝的公众账号第一步就是要验证商户网关和开发者公钥的有效性。

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236714_422556&type=info

文档中忽略了一些细节, 本文进行如下一些细节补充。

1、 生成RSA公密钥对

通过openssl生成公密钥对, 在Linux系统下一般默认已有安装:

1、 让openssl随机生成了一份私钥,加密长度是1024位

openssl genrsa -out rsa_private_key.pem 1024

2、 根据私钥生成公钥

openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout

3、 私钥还不能直接被使用,需要进行PKCS#8编码

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -out pkcs8_rsa_private_key.pem -nocrypt

去掉头和换行, 公密钥对即可使用了。注意私钥是使用PKCS#8编码的版本。

“去掉头和换行” 举例, 例如公钥如下

yulong$ more rsa_public_key.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnlK8+l+YnhRd0SM9p/D2zhxAw
sB9Zpt+mDlyyTSLwYPiBhmhemIvkPYHxllQrTop2GnNr4QuF2tGAw/ds5E5G+GGs
EshN1F5R6rIN2eKk59/nV4f7jzVkV+iq+KfTg8MYAn76PtBUK7TyahnBX4U3Umus
QGiCIhUyJpCOKrq5EQIDAQAB
-----END PUBLIC KEY-----

转成代码中的使用的公钥为:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnlK8+l+YnhRd0SM9p/D2zhxAwsB9Zpt+mDlyyTSLwYPiBhmhemIvkPYHxllQrTop2GnNr4QuF2tGAw/ds5E5G+GGsEshN1F5R6rIN2eKk59/nV4f7jzVkV+iq+KfTg8MYAn76PtBUK7TyahnBX4U3UmusQGiCIhUyJpCOKrq5EQIDAQAB

注意如果公钥是放在XML中配置, 要加上 <![CDATA[]]> 防止XML转义

 <property name="PublicKey"><value><![CDATA[${public_key}]]></value></property>

2、 商户网关的应答关键细节

在开启商户开发者模式时, 需要通过验证网关。 支付宝公众账号向配置的网关地址, 发送一个HTTTP POST请求, 商户网站必须要能够正确响应这个HTTP POST请求, 才能完成商户网关的验证。

验证的基本细节参见支付宝文档, 这里提两点文档中没有提及的问题。

首先被加签的内容是如下拼接完成的字符串

"<success>true/false</success><biz_content>开发者公钥</ biz_content>" 进行RSA加签, 可以调用支付宝提供的SDK完成

    public void process(Message message, ModelMap modelMap) {boolean isSuccess=true;if(message==null || (!config.getAppId().equalsIgnoreCase(message.getAppId()))){isSuccess=false;}String bizContent="<success>"+String.valueOf(isSuccess)+"</success>"+"<biz_content>"+customerPublicKey+"</biz_content>";String signResult = AlipaySignature.encryptAndSign(bizContent, alipayPublicKey,customerPrivateKey, AlipayConstants.CHARSET_GBK, false, true);modelMap.put("signResult", signResult);}

config.getAppId() 为商户AppID, 可以在公众账号平台上查询, 是一个数字ID; customerPublicKey为上一节中生成的商户RSA公钥, customerPrivateKey为上一节中生成PKCS#8编码的商户私钥。

signResult 就是准备好的返回给支付宝公众账号平台的XML结果。 AlipaySignature.encryptAndSign 函数会自动拼装反馈XML结果。 两个boolean参数, 表示是否加密, 是否加签。

准备好反馈字符串之后, 还要注意一下细节

    public void doPost(ModelMap modelMap, WebRequest request,HttpServletResponse response){// .... 此处略去前面提的生成XML反馈细节
        //要注意设置反馈的HTTP 请求的Head指定为XML格式, 否则XML中的特殊字符会当做HTML发生转义, 造成支付宝公众账号平台无法识别。
        response.setHeader("Content-Type", "application/xml");try {if(modelMap.containsAttribute("signResult")){logger.warn("Response: "+(String)modelMap.get("signResult"));response.getOutputStream().print((String)modelMap.get("signResult"));}response.getOutputStream().flush();} catch (IOException e) {logger.error("Write Response Error", e);}}

添加标签

支付宝公众账号商户网关的搭建, RSA密钥对生成相关推荐

  1. 支付宝打造公共账号业务网关, RSA密钥对生成

    作者: 玉龙      版权全部,同意转载. 请注明出处(创建金融_玉龙  http://www.weibo.com/u/1872245125) 原文地址: http://blog.csdn.net/ ...

  2. RSA密钥对生成工具代码

    RSA密钥对生成工具 RSA密钥对生成工具 RSA密钥生成 RSA密钥写入文件 RSA密钥生成测试 Github代码仓 RSA密钥对生成工具 最近研究License方案,用到了Java生成RSA公私钥 ...

  3. 在SAE搭建微信公众账号服务

    让我们回到2014年11月,从公司请假回成都,在天府软件园B区旁边的小区里,那个10多平米的出租屋里,闲来无事,我想找个事情做一做,好让我这漂浮的心静下来.大约在半年前就申请了微信的一个公众账号,一直 ...

  4. 新浪云python开发_python,flask,SAE(新浪云),搭建开发微信公众账号

    将我们的服务器放在新浪云上,搭建微信公众账号,下面的代码将实现获取微信token,实现最简单的消息对话(用户说什么,我们回复什么). 因为网上有的代码有错,所以将这个传上来供大家借鉴 注意,代码中的空 ...

  5. 微信公众账号支付商户接入指南

    公众号支付商户接入指南 ----------------------------- 1 公众账号相关事宜说明 1.1 申请微信支付的公众账号需符合的条件 申请微信支付功能的公众号必须具备 2 个条件 ...

  6. 微信公众号开发-测试公众号账号及本地环境搭建(一)

    https://www.cnblogs.com/fengzheng/p/5023678.html 测试公众号 微信公众号有订阅号.服务号.企业号,在注册的时候看到这样的信息,只有订阅号可以个人申请,服 ...

  7. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  8. JavaEE企业级实战项目 智牛股第七天 权限与网关的搭建

    交易平台 - Day 7 学习目标 目标1:了解OAUTH2统一认证协议, 使用方法与原理 目标2:认证服务搭建, Spring Security OAuth2 的集成使用 目标3:改进用户服务,集成 ...

  9. 支付宝签名php,PHP实现RSA签名生成订单功能【支付宝示例】

    PHP实现RSA签名生成订单功能[支付宝示例] 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  PHP实现RSA签名生成订单功能[支付宝示例].txt ] (友情提 ...

最新文章

  1. 工业级别sd卡存贮slc mlc tlc
  2. const的用法,特别是用在函数前面与后面的区别
  3. Redis开发:hash存储自定义Java对象及value的序列化器设置
  4. Tensorflow Serving部署tensorflow、keras模型详解
  5. python3.5中import sqlite3报错:ImportError: No module named _sqlite3
  6. fish工具_Python程序员使用哪些开发工具
  7. 对称加密算法原理与常用实现
  8. npm 编译打包vue_从零到一教你基于vue开发一个组件库
  9. MTK 驱动 (70)---MTK Projiectconfig.mk文件详细解释
  10. mysql增删改查_MySQL的基本使用——简单的增删改查
  11. C语言题库青岛理工大学,青岛理工大学C语言期末复习题库.doc
  12. (Unity4.7)assetbundle 坑爹总结
  13. Flash Cs4 安装之后打不开
  14. 网络安全阶段一学习笔记
  15. 谷粒商城高级篇(39)——认证服务之验证码注册
  16. 艾森豪威尔法则(四象限法则)
  17. JNI 静态注册和动态注册
  18. 快速搭建个人在线书库,随时随地畅享阅读!
  19. 区块链改革(链改)全国行动委员会第一次会议胜利召开
  20. 无法用ip连接mysql数据库_MYSQL数据库无法使用IP访问的方法

热门文章

  1. malloclab 实验详解(动态分配器如何设计)
  2. 助力百万企业从容上云,易建科技有六大“法宝”傍身!
  3. 微信小程序 基础知识
  4. lucene Lucene Spatial
  5. css使用定义动画anima,CSS Transform和动画
  6. 协整检验——进出口与经济增长
  7. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API
  8. 用Java求出所有水花仙花数
  9. oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录
  10. 03 A股10个月争取翻10倍实盘操作记录(第1周-休养生息,守株待兔)