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

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

支付宝的公众账号文档地址 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);
        }
    }

添加标签

时间: 2024-10-03 21:41:17

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

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

作者: 玉龙      版权全部,同意转载. 请注明出处(创建金融_玉龙  http://www.weibo.com/u/1872245125) 原文地址: http://blog.csdn.net/yehuijun/article/details/24780119 支付宝的公众账号文档地址 http://open.alipay.com/index.htm 要开通支付宝的公众账号第一步就是要验证商户网关和开发人员公钥的有效性. key=236714_422556&type=info" c

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

让我们回到2014年11月,从公司请假回成都,在天府软件园B区旁边的小区里,那个10多平米的出租屋里,闲来无事,我想找个事情做一做,好让我这漂浮的心静下来.大约在半年前就申请了微信的一个公众账号,一直闲置着,终于决定再次着手搭建一个微信公众账号.SAE(Sina App Engine)是国内最早开始提供云服务的平台之一,而且几乎是免费的.所以希望能够通过SAE平台快速的搭建好一个微信公众账号.在一边摸索一边学习的情况下,小半天就搭好了一个简易的微信公众平台.今天,就利用SAE搭建微信公众平台的过

微信公众账号开发教程(二) 基础框架搭建

首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处理HTTP请求,及响应 2)分发层.由接口层传入请求,然后具体分析请求类型,分发至不同的处理器 3)业务逻辑层.这里是我们的具体业务逻辑了,根据请求,实现具体的业务逻辑. 4)数据层.我们在实现某个应用时可能需要访问数据,可以是数据库或者是文件.如果是简单应用,可能没有这一层. 其实,具体的应用可以在这个结构上去扩展,可以扩展消息对象层.业务对象层.数据访问层.功能管理层等.这

微信公众账号开发教程

微信公众账号开发教程 一.第1篇-引言 本文转载来自柳峰老师的博客,在这里非常感谢柳峰老师的分享和贡献! 内容方面,大概会涉及到: 1)前沿知识:微信公众帐号的分类.两种模式各自的特点和区别.开发模式的配置使用等: 2)API中各类消息的使用(我已经对api进行封装并打成了jar包,到时候会考虑分享出来): 3)微信公众帐号开发中的小技巧(如换行.通过代码发送表情.屏幕飘雪花.表情的接收识别.在Android和iOS上表现不一致等等): 4)与业务系统对接的方法(链接.短信等,除了技术讲解还会做

你创建微信公众账号了吗?别闲着,来做微信营销吧

微信占领了我们的生活,微信改变了我们的生活.公交车上刷微信,马桶上在刷微信,边吃饭边刷微信,工作一会儿就刷微信,甚至和朋友吃饭聚会也在刷微信,睡觉前的最后一个动作也在刷微信... 可见,微信现在占据了人们生活的很大一部分,而我们怎么能错过这个商机呢?新的营销时代,微信营销! 想了解微信公众平台管理系统吗http://chenxin.imicro.cc/  爱微imicro微信公众平台管理系统,出售整套系统,包安装,建立和微企一样的平台,拥有属于你自己的站,你也可以给别人开代理账户,自己去运营赚钱

捷微jeewx , 免费开源微信公众账号开发平台

敏捷微信开发平台,简称"捷微", 捷微jeewx是一款免费开源的微信公众账号管理系统. 官方QQ群:  287090836 官网:    http://www.jeewx.com 平台介绍: 一.简介 jeewx是一个开源,高效,简洁的微信开发平台,采用JAVA语言基于jeecg这个企业级快速开发框架实现的. jeewx的目的是最大化的简化微信开发的流程,使用开发者能把最好的精力放到微信具体业务开发,并能以最快的时间完成.把一些常规而频繁的工作交由jeewx来处理即可,平台兼备的代码生

微信公众账号开发教程(三) 实例入门:机器人

一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建http://www.cnblogs.com/yank/p/3392394.html 2.签名认证和分发请求 这里不再赘述,参照上

微信(公众,商户,开放)平台的区别

一.微信开放平台 https://open.weixin.qq.com/ 主要面对移动应用/网站应用开发者,为其提供微信登录.分享.支付等相关权限和服务. 微信开放平台还提供了数据统计功能,用于开发者统计接入应用的登录.分享等数据情况. 接入步骤 比如APP需要使用微信登录.分享和微信支付功能,首先注册微信开发平台-开发者账号,按照流程在微信开放平台创建APP, 审核通过后,即可获得的初级权限,微信开放平台开发资源   (包含一些接入流程,说明等,需要登陆) 二.微信公众平台 https://m

微信公众平台开发(一) 申请微信公众账号

一.微信公众平台介绍 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,可以群发文字.图片.语音.视频.图文消息五个类别的内容. 二.注册微信公众号 1.注册地址: https://mp.weixin.qq.com/ 点击右上角的"立即注册"申请微信公众账号. 2.填写基本信息 3.激活邮箱账号 到邮箱中收取邮件,激活公众平台账号. 4.信息登记 通过邮箱激活后,填写基本信息.选择为"个人"后,后面只能选择&qu