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属性中, 就可以在页面上展示这个二维码了!

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

  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/dagger9527/p/11836708.html
Copyright © 2011-2022 走看看