java实现网站paypal支付功能并且异步修改订单的状态
java实现网站paypal支付功能并且异步修改订单的状态:步骤如下
第一步:去paypal的官网https://www.paypal.com注册一个个人账号,在创建沙箱测试账号时需要用到
第二步:paypal提供了模拟的测试环境,我们需要在https://www.sandbox.paypal.com/去创建一个虚拟卖家账号和买家账号
(必须用第一步注册的真实账号才能登录进去,沙箱账号是登录不进去的)
第三步:登录成功后创建卖家、买家账号,如果不知道在哪创建账号可以直接点击这个链接https://developer.paypal.com/developer/accounts/
如下图:
上面几个就是我创建的卖家和买家测试账号,如果创建不了的可以私信我
第四步:编写java代码,把必要的数据传给paypal就行,比如金额、产品描述等等
第五步:编写异步回调路径的java代码
/**
* pay pal支付返回信息
* @param request
* @param response
*/
@RequestMapping("payPal/recharge")
public void payPal(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException, ParseException {
String itemNumber="";
Enumeration en = request.getParameterNames();
while (en.hasMoreElements()) {
String paramName = (String) en.nextElement();
String paramValue = request.getParameter(paramName);
if(paramName.equals("item_number")){
itemNumber=paramValue;
}
}
String id[]=itemNumber.split(",");
PrintWriter out=response.getWriter();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sDate = sdf.format(new Date());
Date date = sdf.parse(sDate);
String str1 = request.getParameter("tx");
/*正式环境下
String str2 = "&at=sTvmKEM1YR2EmQXW3VyBrqYWiX-8_wr0Sj5w2DQ5uqGoakHYOCKcFsaAAU4";
*/
String str2 = "&at=VmjfBuVl1vbSC6bMV7xvROqisIsrMpKftSx_bLbAnNr-UO2JsLnAR2wfzK8";
String str = "?tx=" + str1 + "&cmd=_notify-synch" + str2;
/*
String str = "?tx=" + str1 + "&cmd=_notify-validate" + str2;
*/
/* 正式环境下
String payPalUrl = "https://www.paypal.com/cgi-bin/webscr";
*/
String payPalUrl = "https://www.sandbox.paypal.com/cgi-bin/webscr";
payPalUrl = payPalUrl + str;
URL u = new URL(payPalUrl);
URLConnection uc = u.openConnection();
uc.setDoOutput(true);
uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
PrintWriter pw = new PrintWriter(uc.getOutputStream());
pw.println(str);
pw.close();
//接受PayPal对IPN回发的回复信息
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String line = "";
String txn_id = ""; //paypal的号码
String item_name = "";//本地订单号
String contact_phone = "";
int i = 0;
String res = "";
String msg = "";
while ((line = in.readLine()) != null) {
i = i + 1;
if (i == 1) {
res = line;
}
if (res.equals("SUCCESS")) {
if (line.indexOf("txn_id=") != -1) {
txn_id = line.replace("txn_id=", "");
} else if (line.indexOf("item_name=") != -1) {
item_name = line.replace("item_name=", "");
} else if (line.indexOf("contact_phone=") != -1) {
contact_phone = line.replace("contact_phone=", "");
}
}
}
if (!txn_id.equals("") && !item_name.equals("")) {
UserRecord userRecord=userRecordService.findById(Integer.parseInt(id[1]));
userRecord.setCommitDate(date);
userRecord.setHandler(id[2]);
userRecord.setState(0);
userRecordService.updateUserRecord(userRecord);//修改数据库的字段信息
msg = "Pay for success! Please wait for delivery! Your Order Number: " + txn_id + " !";
} else {
msg = "Sorry ! Your operating error! Please contact website administrator !!";
}
out.print("<script>alert('" + msg + "');location.href='" + request.getContextPath() + "/goto/back'</script>");//支付完毕返回 用户信息页 !
} 注意)本地是无法进行异步调试,要在外网才行,也可以使用nat123将本地映射到外网。另外,如果异步返回时接收不到相关的数据,有可能是你没开通PDT数据传输功能,在网站付款
习惯里面可以设定,如下图:
原文博客的链接地址:https://cnblogs.com/qzf/
java实现网站paypal支付功能并且异步修改订单的状态的更多相关文章
- Paypal 支付功能的 C# .NET / JS 实现
说明 最近用到了 Paypal 支付功能,英语一般般的我也不得不硬着头皮踩一踩这样的坑.经过近乎半个月的作,终于实现了简单的支付功能,那么首先就说说使用 Paypal 必定要知道的几点(当前日期 20 ...
- Java构建网站多级菜单功能解决方案
在网站开发的时候我们会对网站的栏目进行分类,一个栏目可以有多个子分类,一个子分类又可以有分裂,例如:新闻栏目下有每日早报和每日晚报两个栏目,其中每日早报下面又分为上海早报,北京早报,杭州早报,下面是京 ...
- django 实现电子支付功能
思路:调用第三方支付 API 接口实现支付功能.本来想用支付宝来实现第三方网站的支付功能的,但是在实际操作中发现支付宝没有 Python 接口,网上虽然有他人二次封装的的 Python 接口,但是对我 ...
- 【weixin】微信支付---PC网站微信支付
一.PC网站支付 微信支付支持完成域名ICP备案的网站接入支付功能.PC网站接入支付后,可以通过JSAPI支付或Native支付,自行开发生成二维码,用户使用微信“扫一扫”来完成支付. 二.支付产品介 ...
- s11 day 101 python Linux环境安装 与路飞项目支付功能
from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = ...
- Java支付宝PC网站支付功能开发(详细教程)
一.前言 本案例使用的是Java实现的.使用支付宝的沙盒环境示例.发布需要换成正式环境.这里就不作详细说明了 本代码适合用来做参考,不要直接复制去使用. 没有账号的需要去平台注册一个: 登录支付宝开发 ...
- JAVA微信扫码支付模式二功能实现完整例子
概述 本例子实现微信扫码支付模式二的支付功能,应用场景是,web网站微信扫码支付.实现从点击付费按钮.到弹出二维码.到用户用手机微信扫码支付.到手机上用户付费成功.web网页再自动调整到支付成功后的页 ...
- java如何集成支付宝移动快捷支付功能
项目需要,需要在客户端集成支付宝接口.第一次集成,过程还是挺简单的,不过由于支付宝官方文档写的不够清晰,也是走了一些弯路,下面把过程写出来分享给大家.就研究了一下:因为使用支付宝接口,就需要到支付宝官 ...
- 聊一聊Java如何接入招行一网通支付功能
1.前提条件 相比较于支付宝和微信的支付功能接入这一块,银行相对来说更加严格,比如说支付宝,在你签约之前可以进行一些测试.但是银行来说就不是这样了,如果您现在要进行招行的支付功能开发的话,请务必先让相 ...
随机推荐
- bootStrap 教程 文档
参考1: https://www.w3schools.com/bootstrap/default.asp 参考1:http://www.runoob.com/bootstrap/bootstrap-i ...
- Django中使用Celery实现定时任务(用djcelery)
一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...
- 什么是kafka以及如何搭建kafka集群?
一.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. Kafka场景比喻 接下来我大概比喻下Kafka的使用场景 消息中间件:生产者和消费者 妈妈:生产 ...
- Simple2D-21(重构)渲染部分
以前 Simple2D 的渲染方法是先设置 Pass,然后添加顶点数据,相同 Pass 的顶点数据会合并在一起.当设置新的 Pass 时,将旧的 Pass 和对应的顶点数据添加到渲染数组中.最后在帧结 ...
- iphone splash screen
https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articl ...
- visual c++ 中的stdafx.h头文件的作用
stdafx.h VC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了... stdafx的英文全称为:Stand ...
- @Transactionl注解
spring 事务注解 默认遇到throw new RuntimeException("...");会回滚 需要捕获的throw new Exception("...&q ...
- C#四舍五入说明
string.Format("{0:N2}", d) 与 Math.Round(d, 2).ToString() 不总是相等 string.Format("{0:N2}& ...
- oracle老是出现监听错误
解决方法之一: 点击开始-->选择程序--->选中你安装的oracle版本-->选中配置与移植工具-->选中Net Configuration Assistant-->在 ...
- 大型运输行业实战_day08_1_memcache缓存生产应用
1.memcache使用环境搭建 1.安装memcached服务器 安装方法 以管理员身份打开cmd,在cmd中执行如下命令: 注意:在执行该命令时必须在memcached.exe文件下执行. 2.开 ...