• 对接支付宝的城市服务(水费)


    支付宝商家账户申请

    • 申请网址 : b.alipay.com
    • 注册流程

    1. 申请商家版支付宝

    2. 进行实名认证,等待审核(3个工作日

    3. 成为开发者

    4. 签约支付功能(详见支付宝支付能力)中的一种,可以多种

    5. 审核支付功能 (3-5个工作日

    6. 开发者配置、Admin配置

    支付宝方相关概念

      

    • 支付宝应用: 所有支付对外都功能都称之应用,应用又分为第三方应用和自研型应用。
    • 第三方应用: 主要服务对象是ISV(独立软件服务商)。
    • 自研型应用: 主要给商户自己用。自研型应用又分为小程序、网页&移动应用、生活号。
    • 应用审核 : 创建应用会收集名称和图标,需要等待审核。
    • 商户:      所有支付宝的对公客户都被称为商户。
    • 独立软件服务商 :即ISV,Independent Software Vendors , 特指专门从事软件的开发、生产、销售和服务的企业。 这个扮演的角色主要是帮助那些不具备软件开发的公司(比如很多企事业单位)去完成软件开发。所以支付宝选第三方应用的时候,会选择第三方代理公司,这里的代理就是ISV。

    支付宝支付能力

      目前官方https://docs.open.alipay.com/ 文档中支付能力包括:

    •  1. 当面付
    •     2. APP支付
    •     3. 手机网站支付
    •     4. 电脑网站支付
    •     5. 花呗分期
    •     6. 刷脸付
    •     7. 收单资金结算到银行账户的到账消息

    支付宝第三方开发流程

    支付宝密钥生成

    密钥生成工具地址https://docs.open.alipay.com/291/105971

    • 下载文件的名字: RSA签名验签工具windows_V1.4
    • 注意 : 1. 双击脚本文件 “RSA签名验签工具.bat” 即运行RSA签名验签工具。

              2. RSA2签名方式使用算法:SHA256withRSA

                  RSA签名方式使用算法:SHA1withRSA

              3. 签名验签工具不要放在文件路径名存在空格的文件夹下。

    • 密码生成后:

        开发者就可以在应用的开发配置页面进行配置。点击“设置应用公钥”后,复制上一步生成的公钥,点击“保存”,即可完成公钥的设置。

        签名验签,私钥的加签和公钥的验签都用下面这个包

            groupid  :  com.alipay.sdk

            artifactid  :  alipay-sdk-java

            Lastest Version  :  3.7.26.ALL

    Java证书管理工具keytool

      说明:和支付宝对接用的是SSLServerSocket, 我们开启服务端Socket,等待支付宝来调用。

      

    Keytool生成密钥

    • 生成服务端

        keytool -genkey -alias serverkey -keyalg RSA  -validity 365 -keystore d:keykserver.keystore

        输入密钥库口令及地区信息等(密钥库口令123456)

    • 输入密钥口令(1234567)
    • 建议用PKC12标准

        keytool -importkeystore -srckeystore d:keykserver.keystore -destkeystore d:keykserver.keystore -deststoretype pkcs12

        (此时报错:keytool 错误: java.lang.Exception: 目标 pkcs12 密钥库具有不同的 storepass 和 keypass。请在指定了 -destkeypass 时重试。)

        更改命令如下:

        keytool -importkeystore -srckeystore d:keykserver.keystore -destkeypass 1234567 -destkeystore d:keykserver.keystore -deststoretype pkcs12

        所以尽量库密码和私钥密码一致。

    • 根据私钥导出服务端证书

        keytool -export -alias serverkey -keystore d:keykserver.keystore -file d:keyserver.crt

    • 将服务证书导入到客户端Trust keystore中

        keytool -import -alias serverkey -file d:keyserver.crt -keystore d:key client.keystore

    • 生成客户端

        keytool -genkey -alias clientkey -keyalg RSA  -validity 365 -keystore d:keykclient.keystore

        密钥库和密钥的密码都设置成abcdef

        执行:

        keytool -importkeystore -srckeystore d:keykclient.keystore -destkeystore d:keykclient.keystore -deststoretype pkcs12

        就不会再让加-destkeypass 时重试

    •  根据私钥导出客户端证书

        keytool -export -alias clientkey -keystore d:keykclient.keystore -file d:keyclient.crt

    • 将客户端证书导入到服务端Trust keystore中

        keytool -import -alias clientkey -file d:keyclient.crt -keystore d:key server.keystore

    数据加密额外补充

      

    对称加密

        对称加密是一种很快速很简单的加密方式,加密和解密用相同的密钥,密钥越短,解密耗时越短,密钥越长,解密时间就越长。所以使用对称加密需要注意两个方面:

          一是如何平衡耗时和安全性。二是加解密双方需要如何传送和保管密钥,一旦密钥泄露,可是天大的事情。

    非对称加解密(公钥和私钥对)   

        非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥

          RSA数字签名算法,历史二十年,经历无数攻击依然屹立不倒。

          公钥 : 可以随便在网络上传输,也可以告知别人,大家都可以看得到。

          私钥 : 自己的非常重要非常私密的。

          着重注意 : 这个秘钥对中,如果使用任意一把来加密数据,那么只有使用另外一把才能解密数据。

          而用法有两种:

              第一种用法:公钥加密,私钥解密。---用于加解密

              第二种用法:私钥签名,公钥验签。---用于签名

    签章,也叫签名,也叫数字签名

      签章 : 其实就是用私钥加密,对应的公钥解密的过程。为什么会出现签章这个过程?第一种情况:A要给B发密文,那么A肯定用B的公钥加密,然后B用自己私钥解密

    就可以。但是C也可以拿B的公钥加密,冒充A发给B,B用自己私钥解密,认为是A发的,所以就出现风险问题。第二种情况: A要给B发送明文,随便哪个人都可以冒充A给B发信息。所以,这两种情况B都无法认证A是否是真的A,那么签章就是避免冒充的

      数字签名的过程:

             A 要给 B 发送一段明文,第一,如何避免有人冒充A? 第二,如何避免A发送的内容没有被篡改过?

        第一步 :明文 ---- 经过HASH算法 ---- 生成很短的消息摘要,为什么这么做?

          1. hash算法不可逆。

          2.消息内容不重复,哪怕明文改一个字,重新hash后生成的摘要都和之前的不一样,目的就是防止明文内容被篡改。

        第二步 :消息摘要 ---- A的私钥进行加密 ---- 得到A的数字签名(Signature),相当于古代A按的指拇印。

        第三步 :把数字签名附加到明文信息中,传给B。B拿到这份信件后,同样需要做两件事,第一核实是否是A发过来的,第二,核实A发过来的内容没有被篡改。

        第四步 : B用A的公钥对A的数字签名进行解密,解密成功,便确认是A发来的,不是C或者D冒充。接着,B 把明文再进行hash运算,和解密数字签名得到的消息摘要对比,如果一致,说明信件没有被篡改。

    数字证书   

      我们再来试想一个场景,A本来想把自己的公钥给B,用作他们的加解密,但是B没有拿到A的公钥前,有个别有用心的C冒充A,把C的公钥发给了B。此时B认为拿到了A的公钥,于是,他就用误认为A的公钥(实际是C的公钥)给A写信:我的银行密码是888888。C拦截到B的信件后,用自己的私钥就解密打开了。

           那么,如何避免公钥冒用呢?前面说到用签名的方式,可以验证发信人的真实身份。这里要避免公钥冒用,就产生了数字证书。

      数字证书的特点:

          i. 由专门的机构签发的数字证书才安全有效。

       ii、签发数字证书是收费的。

          iii、不会被冒充,安全可信。

          iv、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在使用期内,对证书进行作废操作。

          v、CA的公钥已经集成到操作系统中了。

      生成数字证书的流程如下:

          i、持有人将公钥以及身份信息发送给权威机构。

          ii、权威机构负责对持有人的身份进行验证,确保公钥和持有人的信息准确无误。

          iii、权威机构使用自己私钥对持有人公钥进行数字签名,生成数字证书。

          iv、为了确保证书不被篡改,权威机构对数字证书进行hash计算(指纹算法),生成摘要(指纹),使用自己的私钥对摘要进行数字签名,放到数字证书中。

          v、对持有人收费。

          这样,就可以避免公钥被冒用。

          综上,私钥可以通过数字签名来保证自己的唯一和真实,公钥可以用权威机构颁发的数字证书来保证不会被冒用,就大大的增加了数据在网络上传送的安全性。

    额外说明

      第一点:你把所有准备工作做好,用支付宝对外的在线客服联系支付宝,支付宝会派人和你对接。会提供给你对接的接口以及数据交互的demo代码。

      第二点:即便是测试,也需要真实的事业单位账号。

      第三点:支付宝的接口也不是一层不变的,需要和他们联调,按照联调结果上线。

      第四点:这里不提供源码,我接到任务时也是丈二和尚摸不着头脑,慢慢和支付宝方沟通,自然会水到渠成。

  • 相关阅读:
    23种设计模式
    设计模式中类的关系
    简单工厂模式
    SQL正则表达式
    C#中各种计时器
    C# List 排序
    常见名词解释
    PetaPoco入门
    jQuery UI Dialog
    c# winform 获取当前程序运行根目录
  • 原文地址:https://www.cnblogs.com/lioa/p/12576759.html
Copyright © 2020-2023  润新知