[java]代码库JAVA调用支付宝的直充接口原理和银联接口一样,当商家和支付宝签好协议后就可以问支付宝的人要相关的代码了。

我本地用的是支付宝UTF-8编码的代码,先把util里的东西达成一个alipay.jar文件。然后编写我们自己的调用和响应代码:

1.封装支付宝需要的接口数据

@Description("会员中心资金帐户支付宝充值")

@CreatedInfo(creator = "hamano", date = "2008-09-22")

public ModelAndView fundsDepositByAliPay(HttpServletRequest request,

HttpServletResponse response) {

RemindPageUtil remindPageUtil = new RemindPageUtil();

Map paraMap = new HashMap();

String paygateway = "https://www.alipay.com/cooperate/gateway.do?"; // '支付接口

String service = "create_direct_pay_by_user";// 快速付款交易服务

String sign_type = "MD5";

String out_trade_no = SnGenerator.generateUnionPaySn(); // 商户网站订单

String input_charset = "utf-8";

String key = ""; // 支付宝安全校验码(账户内提取)

String partner= ""; // 支付宝合作伙伴id (账户内提取)

String body = "商品描述"; // 商品描述,推荐格式:商品名称(订单编号:订单编号)

String total_fee ="0.01";// 订单总价

String payment_type = "1";// 支付宝类型.1代表商品购买

String seller_email = "pay@365.com"; // 卖家支付宝帐户

String subject = "商品名称"; // 商品名称

String show_url = "http://www/foolpid.net/product/show_product.jsp";//商品显示页

String notify_url = "http://www/foolpid.net/accountController.do?method=alipayNotify"; // 通知接收URL

String return_url = "http://www/foolpid.net/accountController.do?method=alipayReturn"; // 支付完成后跳转返回的网址URL

String ItemUrl = Payment.CreateUrl(paygateway, service, sign_type,

out_trade_no, input_charset, partner, key, show_url, body,

total_fee, payment_type, seller_email, subject, notify_url,

return_url);

//支付宝接口用POST传输,所以我自己写了个将GET转为POST的方法,代码在下面的程序中给出

HttpClient http=new HttpClient(response);

http.setParameter("body",body);

http.setParameter("notify_url",notify_url);

http.setParameter("out_trade_no",out_trade_no);

http.setParameter("partner",partner);

http.setParameter("payment_type",payment_type);

http.setParameter("return_url",return_url);

http.setParameter("seller_email",seller_email);

http.setParameter("service",service);

http.setParameter("show_url",show_url);

http.setParameter("sign",ItemUrl);

http.setParameter("sign_type",sign_type);

http.setParameter("subject",subject);

http.setParameter("total_fee",total_fee);

try {

http.sendByPost("https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8");

} catch (IOException e) {

}

return null;

}

2.根据notify_url的设置响应支付宝接口

public ModelAndView alipayNotify(HttpServletRequest request,

HttpServletResponse response) throws Exception {

RemindPageUtil remindPageUtil = new RemindPageUtil();

Map paraMap = new HashMap();

String privateKey = ""; // 支付宝安全校验码(账户内提取)

String partner= ""; // 支付宝合作伙伴id (账户内提取)

String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"

+ "&partner="

+ partner

+ "&notify_id="

+ request.getParameter("notify_id");

// 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的

String responseTxt = CheckURL.check(alipayNotifyURL);

Map params = new HashMap();

// 获得POST 过来参数设置到新的params中

Map requestParams = request.getParameterMap();

for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

String name = (String) iter.next();

String[] values = (String[]) requestParams.get(name);

String valueStr = "";

for (int i = 0; i

valueStr = (i == values.length - 1) ? valueStr + values[i]

: valueStr + values[i] + ",";

}

params.put(name, valueStr);

}

String mysign = com.alipay.util.SignatureHelper.sign(params, privateKey);

String orderId=request.getParameter("out_trade_no");

String amount=request.getParameter("total_fee");

if (mysign.equals(request.getParameter("sign"))

&&responseTxt.equals("true")) {

if("TRADE_FINISHED".equals(request.getParameter("trade_status"))){

return null;

}else{

System.out.println("支付失败");

}

} else {

System.out.println("支付失败");

}

return null;

}

3.return_url的调用和前面一致,用于支付完成后的返回页面

附注:将GET转为POST的类

public class HttpClient {

Map parameter=new HashMap();

HttpServletResponse response;

public HttpClient(HttpServletResponse response)

{

this.response=response;

}

public void setParameter(String key,String value)

{

this.parameter.put(key, value);

}

public void sendByPost(String url) throws IOException

{

this.response.setContentType("text/html");

response.setCharacterEncoding("utf-8");

PrintWriter out = this.response.getWriter();

out.println("HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");

out.println("");

out.println("

sender");

out.println("

");

out.println("

");

Iterator it=this.parameter.keySet().iterator();

while(it.hasNext())

{

String key=it.next();

out.println("");

}

out.println("");

out.println(" ");

out.println(" ");

out.println("");

out.flush();

out.close();

}

}

我 在做程序的时候碰到了一个很怪的现象,在if (mysign.equals(request.getParameter("sign"))&&responseTxt.equals("true")) {}这一句,用jsp页面的时候没有任何问题,但写在类的方法中就会出现mysign和sign不一致的情况,在网上也查过相关资料有的说是编码问题,但 我打印出回调的参数时中文数据都是对的。后来问了支付宝的工作人员,说是key和partner没写,可我写的都对的。最后他们也没给我一个合理的答案, 他们说&&用||代替好了,因为最关键的是下面 if("TRADE_FINISHED".equals(request.getParameter("trade_status"))){}这里的判 断。

所以最后我就改成了if (mysign.equals(request.getParameter("sign"))||responseTxt.equals("true")) {},如果有谁也碰到我一样的情况,请在此留言,告知我一下答案。谢谢!!!//源代码片段来自云代码http://yuncode.net

支付宝接口 java_JAVA调用支付宝的直充接口相关推荐

  1. JAVA调用支付宝直充接口

     分类: 技术空间 2009-01-03 00:31 7011人阅读 评论(4) 收藏 举报 java string payment url service object JAVA调用支付宝的直充 ...

  2. 各大平台卡卷直充接口源码

    卡券.直充接口 1.获取卡券特权数据(直充.卡券) 网关URL:https://router.wikeyun.cn/rest/Quanyi/privilege 参数名 类型 必填 参数说明 id in ...

  3. 卡券、直充接口文档源码分享

    卡券.直充接口 1.获取卡券特权数据(直充.卡券) 网关URL:https://router.wikeyun.cn/rest/Quanyi/privilege 参数名 类型 必填 参数说明 id in ...

  4. 【权益接口】各大平台卡卷直充接口

    卡券.直充接口 1.获取卡券特权数据(直充.卡券) 网关URL:https://router.wikeyun.cn/rest/Quanyi/privilege 参数名 类型 必填 参数说明 id in ...

  5. python 支付宝接口_python调用支付宝支付接口流程

    项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公钥 2.应用公钥 3.应用私钥 4.APPID 5.Django 1.11. ...

  6. python支付宝支付_python 调用支付宝支付

    支付宝接口集成,本地环境调试支付请求 1.首先登录 蚂蚁金服网站,也就是支付宝开发者平台 登录蚂蚁金服开发者平台后,创建沙箱应用 开发者平台 也就是支付宝给开发者提供的调试环境应用 沙箱测试应用 2. ...

  7. php 调用新浪微博接口,php调用新浪微博短链接api接口地址例子

    短链接我们可以自己生成当然也可以调用第三方的如我们调用新浪微博短链接api接口即可生成自己要的地址了,下面来看一些小编总结的例子. 新浪短网址接口的稳定性和跳转速度还是很给力的,现给出其API说明. ...

  8. 微信红包接口 java_java调用微信现金红包接口的心得与体会总结

    这几天看了下之前写的有关微信支付的博客,看的人还是挺多的,看了下留言不知道是因为博客写的不够细还是什么情况,大多都找我要源码,我觉得吧程序员还是需要有这么一个思考的过程,因此没直接给源码,俗话说&qu ...

  9. python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别

    官方文档入口 https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E7.AE.80.E4.BB.8B 安装 pip3 install baidu- ...

最新文章

  1. Httprunner测试
  2. simulink中错误object[id]!=NULL Component: Simulink | Category:Model error
  3. Head First Python学习笔记4——处理数据
  4. java 标准_Java标准注解
  5. sql server动态分页
  6. php不使用copy()函数复制文件的方法
  7. Linux命令学习教程【建议收藏】
  8. MyBatis-Plus——代码自动生成器
  9. PPT制作设计感需从哪些角度提升呢?
  10. 2020下半年软考中级(系统集成项目管理工程师)(个人备考用)
  11. 微信小程序-多层饼图/包含关系饼图/自定义饼图关系模式
  12. Fuchsia 的 Rust 代码占比超 50%
  13. Integer i1 = 10;和Integer = new Integer(10);的区别
  14. CSDN博客运营团队2022年H2总结
  15. 中国医学计算机成级别像杂志,中国医学计算机成像杂志
  16. AS5245磁性角度传感器
  17. 重t2加权是什么意思_魔兽世界怀旧服:为什么BWL打不腻,TAQ没多久大家都AFK了?...
  18. 如何从前端入门到放弃
  19. 10月英语,美好的开始
  20. Shell命令初步了解

热门文章

  1. 珠心算测验(c++)AC代码
  2. 六核至强处理器E5系列服务器CPU,至强E3、E5、E7服务器处理器型号的含义
  3. 大话Stable-Diffusion-Webui-客制化主题(二)
  4. Python新闻联播词频统计
  5. RabbitMQ——邮件服务,初学记录
  6. STM32实现定时器控制LED闪烁
  7. 从瞳孔的扩张收缩提取大脑EEG的delta,theta,alpha,beta,gamma等信号信息
  8. vpc自建服务器,虚拟私有云VPC搭建IPv6网络教程
  9. 苹果Mac键盘打不出字怎么办?
  10. gRPC基本使用(一)--java与go之间的相互调用