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数据传输功能,在网站付款习惯里面可以设定,如下图:
				
时间: 2024-12-10 21:23:03

java实现网站paypal支付功能并且异步修改订单的状态的相关文章

Paypal 支付功能的 C# .NET / JS 实现

说明 最近用到了 Paypal 支付功能,英语一般般的我也不得不硬着头皮踩一踩这样的坑.经过近乎半个月的作,终于实现了简单的支付功能,那么首先就说说使用 Paypal 必定要知道的几点(当前日期 2018年08月07日): 1. 你应该知道 Paypal 支付功能是支持银联卡的,但是不支持中国买家账号支付给中国卖家账号 2. Paypal 接口有两套,切记,产品环境和 sandbox 测试环境不同 3. 测试账号同样不能使用中国账号给中国账号付款 4. 如果你仅仅想具有固定金额的支付按钮,用你的

Java构建网站多级菜单功能解决方案

在网站开发的时候我们会对网站的栏目进行分类,一个栏目可以有多个子分类,一个子分类又可以有分裂,例如:新闻栏目下有每日早报和每日晚报两个栏目,其中每日早报下面又分为上海早报,北京早报,杭州早报,下面是京东首页的分类图. 数据库设计 我们在设计数据库的时候仅仅使用一张表就可以把上面的关系给捋清楚,就是通过一个parentid字段,让我们开看一下这张表的表结构 各位看官可以看一下建表语句 DROP TABLE IF EXISTS `menu`; CREATE TABLE `menu` ( `id` i

java 中调用支付宝支付功能的接口

支付宝接口: 申请支付宝接口服务: 1.https://fuwu.alipay.com/platform/doc.htm#c11   Java-JDK 1.5 SDK 2.https://cshall.alipay.com/enterprise/help_detail.htm?help_id=516349 java 调用jdk服务: 1.https://openhome.alipay.com/platform/document.htm#down 2.https://b.alipay.com/or

网站添加微信支付功能(小白填坑)

本周的工作安排就是在网站添加支付功能,包括支付宝.微信.财付通等,今天这篇文章先说一下微信支付吧,支付宝的太容易了基本看一下都会了 1.首先准备工作,开通了支付功能的账号,具体怎么开通的我也不熟悉因为我做的时候都是使用开通好的账号(目前微信支付好像只支持商家不支持个人吧?) 2.按照我的性格当然是百度一下啦,但是微信支付的文档说明事例实在是太坑了,完全不是我这种小白可以一下看懂的,在这夸奖一下支付宝,支付宝的事例文档做的太好了基本做的时候没什么坑 准备工作结束开工: 我的开发环境是java,所以

手机网站和App如何接入支付宝简易版支付功能PHP版

接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台  2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的接口权限 3.添加功能:一般有扫码付,电脑网站支付,手机网站支付,APP支付.看你的需求什么.移动应用选择APP支付或者是扫码付,而网页应用分为移动端和PC端. 4.商户签约 需要提交相关的资料 一般是要求你提供你的网站地址和APP包等要求 按照支付宝要求来签约相关的支付功能 5.配置你的应用开发配

【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】

一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝支付接口实现java网上支付功能(农业银行). 1.完整源代码:https://github.com/kdyzm/day21_2_pay 2.实现过程的时序图 3.技术要点 (1)使用GET请求的时候必须将全部参数都带上,参数名称参考开发者文档中的请求参数列表 (2)使用PaymentUtil类实现

支持Paypal支付返利的国外网站

综合类 http://www.ebay.com/ (海外“淘宝”,均为第三方卖家) http://www.bluefly.com/ (大牌折扣网,可直邮) http://www.yoox.com/ (意大利奢侈品网,可直邮,也可通过美国转运) 闪购类 http://www.livingsocial.com/ (美国第二大团购网,通过邮箱邀请注册送$5,需提供邮箱) http://www.bidz.com/ (拍卖网,可直邮) http://www.woot.com/ (Amazon旗下团购网,国

【Java EE 学习第21天 使用易宝支付接口实现java网上支付功能】

一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝支付接口实现java网上支付功能(农业银行). 1.完整源代码:https://github.com/kdyzm/day21_2_pay 2.实现过程的时序图 3.技术要点 (1)使用GET请求的时候必须将全部参数都带上,参数名称参考开发者文档中的请求参数列表 (2)使用PaymentUtil类实现

微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口

用户扫码支付成功,微信异步回调商户 上一篇博客完成用户扫码支付功能: https://www.cnblogs.com/qdhxhz/p/9708534.html 当用户扫码支付成功之后,微信会异步回调商户接口,告知用户支付成功.好让商户进行下一步操作. 一.接口说明 1.流程图 这里要做的就是用户支付成功后,微信异步通知商户支付结果,商户收到通知后告知支付通知接收情况. 2.接口说明 有关商户接口应注意以下几点: (1)该链接是通过[统一下单API]中提交的参数notify_url设置,如果链接