zoukankan      html  css  js  c++  java
  • 支付宝接口调用 -- JAVA版

    现在, 网上大多数的支付方式无非就是支付宝, 微信, 所以, 学会用支付宝和微信提供的支付接口已成为必然.

    先进入官网 这里

    登录之后, 进入进入我的开放平台
    使用沙箱工具进行调试
    如果没有项目请创建

    在这里, 我们需要用到的参数就几个

    • APPID
    • 支付宝网关
    • RSA或者RSA2, 这两个加密方式任选其一, 我这里使用的是RSA
    • 商户UID

      一开始, RSA秘钥这里是空的, 你需要去设置
      鼠标悬浮在蓝色小感叹号上, 会出现一行文字, 这里会教你怎么设置秘钥
      点击生成方法

      这里, 你可以根据自己的系统选择不同的版本进行下载, 不过这里并没有提供linux版本的图形界面工具. 如果你是linux用户, 那么你只能通过OpenSSl命令的方式生成. 滑动鼠标滚轮, 移动到页面底部,
      会有一个教程 按钮, 点进去, 它会教你怎么通过OpenSSl命令生成RSA秘钥.
    genrsa -out app_private_key.pem   1024  #生成私钥
    pkcs8 -topk8 -inform PEM -in app_private_key.pem -outform PEM -nocrypt -out app_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式
    rsa -in app_private_key.pem -pubout -out app_public_key.pem #生成公钥
    exit #退出OpenSSL程序
    

    这里1024代表生成的是RSA秘钥, 如果你是2048的话, 那么生成的将是RSA2秘钥.

    命令执行完成之后, 你将会在目录下看到以下3个文件:

    app_private_key.pem, app_private_key_pkcs8.pem, app_public_key.pem

    如果你开发的是JAVA应用程序, 那么你只需要app_public_key.pemapp_private_key_pkcs8.pem
    如果你是PHP, .NET .., 或者其它开发者的话, 你只需要app_public_key.pemapp_public_key.pem

    秘钥我们已经生成好了, 紧接着, 来将刚生成的秘钥上传到沙箱工具中, 将app_public_key.pem去掉头部和尾部, 并将中间的换行符去掉之后, 直接提交上传

    服务器就会帮我们自动生成支付宝的公钥

    左边使我们的应用公钥, 右边使我们的支付宝公钥, 注意我的是RSA加密方式, 如果你是RSA2加密方式, 请在RSA的上面上传.

    在下面下载支付宝沙箱环境app

    下载官方demo示例: 这里
    选择Java版本

    下载完成之后, 解压, 打开eclipse, 将解压后的项目工程引入

    TradePayDemoTradePaySDK, 这里我们只看TradePayDemo

    在src目录下打开zfbinfo.properties配置文件, 我们需要对里面的配置做修改:

    这里面, 我们需要修改的有7个参数

    • open_api_domain: 支付宝网关, 在沙箱应用中可以找到
    • pid: 商户UID
    • appid: APPID
    • private_key: app_private_key_pkcs8.pem将其去头去尾, 然后删除中间的换行符
    • public_key: 应用公钥
    • alipay_public_key: 支付宝公钥
    • sign_type: 加密类型, 可选RSARSA2

    进入Main.java, 运行main方法

    出现Success代表成功, 注意, 因为沙箱环境会在星期天到星期一进行维护, 所以有可能访问失败, 最好换个时间点测试.

    这里的TradePayDemo是个web项目, 你默认导入的是一个java工程, 所以你需要将它转换成Dynamic Web project工程, 在项目上右键 -> properties -> 输入project facets

    按照上面的方法将它转换成web工程

    但是, 又会发现一个新问题, TradePayDemo项目在部署到tomcat的时候, 会报404错误, 原因是发布到tomcat上的项目没有jsp页面

    WebContent文件夹是我们把java工程强行转换成web工程时出现的, 而WebRoot文件夹才是我们jsp页面存放的文件夹, tomcat默认导入的是WebContent这个文件夹, 所以我们需要指定一下, 该导入的是WebRoot文件夹而不是WebContent.

    在项目上 右键 -> properties -> 输入dep

    这里是部署到tomcat时, 要部署所有的文件夹, 我们将原来的WebContent修改为WebRoot, 重新部署一下, 问题解决.

    访问 http://localhost:8080/TradePayDemo/

    点击第二个, 当面付2.0, 二维码支付

    随意输入, 点击确认按钮后, 跳转到二维码支付页面, 打开手机上下载好的支付宝沙盒app

    成功支付0.01元~, 已经被支付过的二维码不可重复支付, 这个二维码就已经失效了

    这个test_trade_precreate方法就是我们二维码当面付的执行方法

    • outTradeNo: 使随机生成的订单号, 保证唯一
    • subject: 标题
    • totalAmount: 就是我们规定的支付金额
    • ...

    在这一行, 有一个被注释的方法, 这个方法可以将二维码保存到本地

    ZxingUtils.getQRCodeImge(response.getQrCode(), 256, filePath);
    // 我们只需要修改第3个参数, 也就是二维码在本地的保存路径
    

    在实际开发中, 我们只需要将这个项目下的所有java文件和jar包复制到你的项目中去, 通过Main对象调用这个test_trade_precreate方法就可以了.

    • test_trade_precreate()方法默认是不接受参数的, 所以你需要手动加一个String类型的参数, 代表的是图片的路径, 然后修改

      这一行代码, 将参数imagePath放入String.format()中, 返回图片的绝对路径, 将图片保存到本地路径之后, 并将图片名称作为返回值返回.
    • 修改了test_trade_precreate()方法之后, main函数会报错, 因为在main函数中调用了test_trade_precreate()方法, 我们只需要将那一行代码注释即可
    • 在Servlet中, 将images文件夹的绝对路径传入

      我们只管调用方法, 并接受返回的图片名称, 名称放入request域中, 转发到我们要展示二维码的页面
    • jsp页面代码

      我们只需要将图片名称放入img标签的src属性中, 就可以在页面上展示这个二维码了!

    以上测试皆是在沙盒测试环境中进行测试, 如果需要实现真正的商户收付款功能, 请参见官网上的教程

  • 相关阅读:
    C#-MessageBox全部函数重载形式及举例
    在软件开发中应用80:20原则
    C# 程序员最常犯的 10 个错误
    关于vs2013调试的偶然错误发现与总结(vs2013的承载进程)---ShinePans
    C#好书盘点
    C#中 父类与子类相互强制转换之实验
    如何用C#语言构造蜘蛛程序
    C#创建word,操作、读写
    Linux less/more命令详解
    Linux 环境变量详解
  • 原文地址:https://www.cnblogs.com/dagger9527/p/11836708.html
Copyright © 2011-2022 走看看