支付宝h5支付从支付到退款
先说明,支付是之前写好的,调用的是支付宝旧的即时到账接口,所也没有去集成应用,退款调用的是无密即时到账退款接口!!!
https://doc.open.alipay.com/支付宝文档资料,蚂蚁金服开发平台。首先从开放平台找到即时到账接口资料,上面有demo可以下载,下载demo,修改里面的配置参数即可接通wep支付宝支付(公钥查看支付宝和私钥生成支付宝有生成工具提供)(ps:私钥生成后需要在支付宝上面配置,放到一个地方去才生效)。具体代码修改根据公司需要,支付回掉签名错误问题,demo上面的valueStr不需要进行转码,直接注释掉这一行就行。
下一步生成二维码(我用的是zxing.jar包生成),通过支付宝扫码进行h5跳转到demo里面的掉起支付页面,完成支付,回掉处理根据业务需求写。如果在参数上面加入
sParaTemp.put("app_pay", "Y");//启用该参数启用APP钱包支付。(!!!)
这样在浏览器上面wap支付的时候就能直接打开支付宝app。
下面说退款,退款不要做什么h5页面跳转,只需要后台httpclient去请求支付宝无密退款接口即可,接口地址:https://mapi.alipay.com/gateway.do。
/**
* 处理支付宝退款功能
* @param money 退款金额
* @param alipaycode 支付宝交易流水号
* @return
* @throws DocumentException
*/
public boolean oldAlipayRefund(String money,String alipaycode) throws DocumentException{
boolean bl=false;
Map resultMap=null;
try {
resultMap = AssemblyParameter(money, alipaycode);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();return bl;
}
String result = HttpClientUtil.post(AlipayConfig.old_refund_url, null, resultMap);
Document document = DocumentHelper.parseText(result);
Element root =document.getRootElement();
List<Element> list =root.elements();
for(Element l:list){
if(l.getName().toLowerCase().equals("is_success")){
if(l.getText().equals("T")){
bl=true;
}
}
}
return bl;
} /**
* 拼装支付宝支付接口所需参数,
* @param money 退款金额
* @param alipaycode 支付宝支付完成返回流水号
* @return
* @throws UnsupportedEncodingException
*/
public static Map AssemblyParameter(String money,String alipaycode) throws UnsupportedEncodingException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", AlipayConfig.oldrefundservice);
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("sign_type", AlipayConfig.sign_type);
//sParaTemp.put("notify_url", "");
sParaTemp.put("seller_email", AlipayConfig.seller_email);
sParaTemp.put("seller_user_id", AlipayConfig.partner);
sParaTemp.put("refund_date",DateUtil.normalDateTimeFormat());//退款时间
sParaTemp.put("batch_no", sdf.format(new Date())+System.currentTimeMillis()/1000);//退款号
sParaTemp.put("batch_num", "1");//退款笔数
sParaTemp.put("detail_data",new String((alipaycode+"^"+money+"^正常退款").getBytes("ISO-8859-1"), "utf-8"));//退款描述//alipaycode+"^"+money+"^"+"aaa"
sParaTemp=AlipaySubmit.buildRequestPara(sParaTemp);
sdf=null;
//建立请求
//String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");
return sParaTemp;
}
这个地方有一点需要注意,detail_data,需要转码,不然一直是签名错误。退款流水号是支付宝返回的一个流水号,支付完成的时候是需要保存数据库的,退款需要用到这个流水号!!!
支付宝h5支付从支付到退款的更多相关文章
- 支付宝H5、APP支付服务端的区别(php)
php支付宝H5和APP支付1.准备工作需要前往 蚂蚁金服开放平台申请https://openhome.alipay.com/developmentDocument.htm 2.大致流程1.用户添加商 ...
- 支付宝H5支付demo
支付宝H5支付 首先我们必须注册一个支付宝应用(本案例就直接用支付宝的沙箱环境,这个沙箱也就是支付宝提供给开发者的一个测试环境) 登录地址:https://open.alipay.com/platfo ...
- 支付宝支付-常用支付API详解(查询、退款、提现等)
所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...
- 支付宝H5 与网页端支付开发
在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...
- h5仿微信、支付宝数字键盘|微信支付键盘|支付宝付款键盘
html5仿微信支付数字键盘|仿支付宝键盘|h5仿微信密码输入键盘|自定义数字键盘 很早之前由于项目需求,就有开发过一个h5仿微信支付键盘,这几天就把之前的数字键盘模块独立出来,重新整理开发成demo ...
- 支付宝支付-常用支付API详解(查询、退款、提现等)-转
所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...
- 利用抖音Cookie充值接口提取支付链接,个人调起原生微信h5支付宝h5支付
最近开始搞一些个人支付通道的开发,方便个人不用和第三方平台签约就能收款,省去很多流程手续的成本. 然后翻了一下网上并没有太多现成的技术教程,只能自己研究着搞了. 这次要分享的是利用抖音的充值接口,去分 ...
- ****基于H5的微信支付开发详解[转]
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- 支付宝支付-APP支付服务端详解
支付宝APP支付服务端详解 前面接了微信支付,相比微信支付,支付宝APP支付提供了支付分装类,下面将实现支付宝APP支付.订单查询.支付结果异步通知.APP支付申请参数说明,以及服务端返回APP端发起 ...
- 微信支付/支付宝支付/银联支付,对比加总结(Java服务端)
今天来讲讲支付. 工作到现在,接入过好几个项目的支付,其中涉及到了微信支付.支付宝支付.银联支付. 三种支付的对接感受其实整体上大同小异.都遵循同一个流程: 1).商户APP向商户服务器请求生成订单 ...
随机推荐
- Linux系统编程——特殊进程之僵尸进程
僵尸进程(Zombie Process) 进程已执行结束,但进程的占用的资源未被回收.这种进程称为僵尸进程. 在每一个进程退出的时候,内核释放该进程全部的资源.包含打开的文件.占用的内存等. 可是仍然 ...
- bzoj1699
st表 我还不会st表 f[i][j]表示[i,i+2^j)区间的最值 构造就像lca一样f[i][j]=f[i][j-1] f[i][j]=max(f[i][j-1],f[i+(1<<( ...
- Django day02
一:Django 中 app 的概念 每个项目里面都会 有很多不同的模块,我们可以把它们写在一个项目里,我们把模块分成一个一个不同的app,这样写可以便于管理,写的一些项目也可能不单单是一个页面,还可 ...
- JS通过ajax + 多列布局 + 自动加载来实现瀑布流效果
Ajax 说明:本文效果是无限加载的,意思就是你一直滚动就会一直加载图片出现,通过鼠标滚动距离来判断的,所以不是说的那种加载一次就停了的那种,那种demo下次我会再做一次 css部分用的是html5+ ...
- [转]RDLC报表——动态添加列
本文转自:http://www.cnblogs.com/pszw/archive/2012/07/19/2599937.html 前言 最近接到一个需求:在给定的数据源中,某(些)列,可能需要单独统计 ...
- Blender插件初始化范例
目标 [x] 总结Blender插件初始化范例 总结 插件模板 Blender内部插件实现方式模板功能总结如下: 定义了子模块重加载方式 定义了批量加载子模块的方式 插件注册函数 插件注销函数 模块总 ...
- invoke与call
“调用一个委托实例” 中的 “调用” 对应的是invoke,理解为 “唤出” 更恰当.它和后面的 “在一个对象上调用方法” 中的 “调用” 稍有不同,后则对应的是call.在英语的语境中,invoke ...
- .net MVC成长记录(四)Linq(1)
今天不忙,没什么事情,继续写写随笔. 之前的文章写到了EF,很多人留言EF的操作用什么? 今天,就继续给大家分享EF的操作, Linq . 先从Linq操作Object内置对象开始 从Linq的基础 ...
- Ubuntu中在终端进入root权限但是总提示密码错误的解决方案
先解除root锁定,为root用户重新设置密码 打开终端输入:sudo passwd(注意是passwd不是password) Password: <--- 输入你当前用户的密码 Enter n ...
- spring - quartz - experssion 表达式
字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...