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.前提条件 相比较于支付宝和微信的支付功能接入这一块,银行相对来说更加严格,比如说支付宝,在你签约之前可以进行一些测试.但是银行来说就不是这样了,如果您现在要进行招行的支付功能开发的话,请务必先让相 ...
随机推荐
- python判断unicode是否是汉字,数字,英文,或者其他字符
下面这个小工具包含了 判断unicode是否是汉字,数字,英文,或者其他字符. 全角符号转半角符号. unicode字符串归一化等工作. 还有一个能处理多音字的汉字转拼音的程序,还在整理中. #!/u ...
- Excel 2003-单元格输入中带记忆功能
最近有个同事问我,如何在Excel单元格输入中带记忆功能?其实很简单: 工具ó选项ó编辑ó将“记忆式键入”项选中ó确定: //附图[效果图]:
- linux替换字符串的几种方法
1. 基本替换:s/str1/str2/ 替换当前行第一个str1为str2:s/str1/str2/g 替换当前行所有str1为str2:n,$s/str1/str2/ 替换第 n 行开始到最后一行 ...
- 查询中mybatis的if判断里传入0
1.传入的是long 或者 Integer类型 ,<if test="id != null "> 但是id传值为0时(前提是id对应的类型为long 或者 Intege ...
- Loadrunner通过吞吐量计算每个用户需要的带宽
Loadrunner通过吞吐量计算每个用户需要的带宽 运行一个场景,点击Analysis进行分析,使用分析报告中的Average Throughput(bytes/second)进行计算. 计算公式: ...
- Java集合set的并、交、差操作
集合的并.交.差操作 Set<Integer> result = new HashSet<Integer>(); Set<Integer> set1 = new H ...
- python学习——urlparse模块
urlparse模块: 1.urlparse() 具体程序及结果如下: >>> url = 'http://i.cnblogs.com/EditPosts.aspx?opt=1'&g ...
- [leetcode]269. Alien Dictionary外星字典
There is a new alien language which uses the latin alphabet. However, the order among letters are un ...
- HTML 视频(Videos)
前端video做起来很简单,但是还是需要做一些记录,不然下次再做相关的业务仍得费时间找. 参考地址: http://www.jq22.com/jquery-info404 http://www.run ...
- MongoDB 3.0 Release Notes
MongoDB 3.0支持WiredTiger存储引擎,提供可插拔存储引擎API,新增SCRAM-SHA-1认证机制,改进explain功能. 可插拔存储引擎API 允许第三方为MongoDB开发存储 ...
