码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-28 17:13:56      阅读:646      评论:0      收藏:0      [点我收藏+]

标签:返回   nis   asm   text   line   void   account   一个个   res   

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数据传输功能,在网站付款
习惯里面可以设定,如下图:
技术分享

 



 

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

标签:返回   nis   asm   text   line   void   account   一个个   res   

原文地址:http://www.cnblogs.com/qianzf/p/6782317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!