Spring MVC 使用支付宝接口完成在线支付的示例代码
程序员文章站
2024-02-21 21:36:04
项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。
这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可...
项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。
这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付。
第一步:完善沙箱信息
进入支付宝的开发者中心 就可以看到有个沙箱环境
使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好。支付宝推荐使用rsa2(sha256)秘钥
把自己的公钥填上去就可以了。
第二步 阅读在线支付开发文档
里面需要的配置信息 对应的使用沙箱环境的信息
第三步 环境搭建
下载服务端sdk 并添加到项目中
这里我使用的maven项目 导入本地jar包采用了下列方式
<dependency> <groupid>com.alipay</groupid> <artifactid>alipay</artifactid> <version>1.1.1</version> <scope>system</scope> <!--本地jar的路径,相对或者绝对都可以--> <systempath>${project.basedir}/lib/alipay-sdk-java20170307171631.jar</systempath> </dependency> <dependency> <groupid>com.alipay1</groupid> <artifactid>commons</artifactid> <version>1.1.1</version> <scope>system</scope> <!--本地jar的路径,相对或者绝对都可以--> <systempath>${project.basedir}/lib/commons-logging-1.1.1.jar</systempath> </dependency>
1、调用接口 启动支付页面 具体参数说明 请查看文档
//转到支付页面 //初始化客户端 只需要实例化一次(线程安全) alipayclient alipayclient = new defaultalipayclient("https://openapi.alipaydev.com/gateway.do" , "2016080300153333", globalconstant.app_private_key, "json", "utf-8", globalconstant.alipay_public_key, "rsa2"); alipaytradewappayrequest alipayrequest = new alipaytradewappayrequest();//创建api对应的request //在公共参数中设置回跳和通知地址 alipayrequest.setreturnurl("回跳地址"); //异步回调一定是要在外网 不然支付宝服务器无法访问 alipayrequest.setnotifyurl("异步回调地址"); alipayrequest.setbizcontent("{" + " \"out_trade_no\":\"" + orderid + "\"," + " \"total_amount\":\"" + fetchparcel.getmoney() + "\"," + " \"subject\":\"代领快递\"," + " \"seller_id\":\"2088102169684935\"," + " \"product_code\":\"quick_wap_pay\"" + " }");//填充业务参数 string form = alipayclient.pageexecute(alipayrequest).getbody(); //调用sdk生成表单 httpresponse.setcontenttype("text/html;charset=utf-8"); httpresponse.getwriter().write(form);//直接将完整的表单html输出到页面 httpresponse.getwriter().flush();
1、接收同步回调展示 结果 此结果只是展示,具体状态必须依赖支付宝的异步通知
2、接收异步回调更改订单状态 支付宝的异步回调 是服务器之间的通讯并不会产生页面 并且 设置的回调地址
一定是要在外网上的 不然支付宝的服务器是无法访问该地址的
对回调得到的信息要使用支付宝的api进行校验
//将异步通知中收到的所有参数都存放到map中 map<string, string> paramsmap =new hashmap<>(); paramsmap.put("tarde_no",trade_no); paramsmap.put("trade_status",trade_status); paramsmap.put("total_amount",total_amount); paramsmap.put("out_trade_no",out_trade_no); boolean signverified = alipaysignature.rsacheckv1(paramsmap, globalconstant.alipay_public_key, "utf-8", "rsa2"); //调用sdk验证签名 if (signverified) { //验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure string out_trade_no1 = paramsmap.get("out_trade_no"); string trade_status1 = paramsmap.get("trade_status"); logger.info(out_trade_no1+":"+trade_status1); return "success"; } else { //验签失败则记录异常日志,并在response中返回failure. return "failure"; }
第4步 进行支付体验
这里选择支付宝账号登录 账号 密码 在沙箱环境中可以找到 (买家账号)建议下载支付宝沙箱钱包 可以模拟在线支付调用钱包客户端的效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 浅析PHP7新功能及语法变化总结
下一篇: Java多线程之死锁的出现和解决方法