wap页面调用支付宝app支付为什么直接就是wap支付了

当今时代,几乎人人都有信用卡,白领一族更是信用卡的忠实爱好者,信用消费正在逐渐成为更受欢迎的一种消费方式。大多数人的信用卡都是在银行申请办理的,现在有一种更加便...
今天小编去给好友的蚂蚁森林小树苗浇了浇水!轻松获集得两张福卡,还没有集全支付宝五福卡的小伙伴们,有没有发现这项新攻略呢?赶快添加身边的人为支付宝好友,去浇...
支付宝近几年的用户数量得到了迅猛的扩展,使用也越来越广泛,从一开始的仅限于淘宝购物支付,到现在支付宝支付消费几乎覆盖了我们生活的方方面面。这种变化对我们的生活习...
一、易宝支付
首先易宝支付是第三方支付平台,是中国行业支付的开创者和领导者。易宝支付作为行业支付专家,2006年便首创了行业支付模式,陆续推出了网上在线支付...支付宝手机网页及时到账接口(2)之授权接口请求 - 综合当前位置:& &&&支付宝手机网页及时到账接口(2)之授权接口请求支付宝手机网页及时到账接口(2)之授权接口请求&&网友分享于:&&浏览:0次支付宝手机网页即时到账接口(2)之授权接口请求
& & & &这篇文章主要讲诉系统调用支付宝手机网页即时到账授权接口获取支付宝返回的request_token。
& & & &上篇文章地址:支付宝手机网页即时到账接口(1)之相关信息介绍。
& & & &这是上篇文章结尾调用授权接口的图解。
& & & &官方文档中对授权接口的说明是:
商户利用编程方法来模拟http请求远程解析html,获取支付宝返回的结果数据后,可以结合自身网站的业务逻辑进行数据处理。
& & & 说明中不难看出我们的代码中需要模拟http提交参数,然后解析支付宝返回的结果再进行处理。该项目是用java编写的,所以后续代码也是用java展现。该项目中模拟http需要两个jar包,httpclient.jar和httpcore.jar,我已经上传,点击下载即可。
授权接口请求参数说明
请求参数是商户在与支付宝进行数据交互时,提供给支付宝的请求数据,以便支付宝根据这些数据进一步处理。
2.授权请求参数列表
& & & 从上面的图片可以看到参数比较多,这边简单介绍下(注:下面没有写出字符长度)。
service=alipay.wap.trade.create.direct
授权接口名称(固定)
format=xml
请求参数格式(固定)
接口版本号(固定)。注当前版本,以后说不定会更新
partner=0000
合作者身份ID(开通支付宝商家服务后,支付宝会提供)
请求号(必须唯一,可以用当前时间)
sec_id=MD5
签名方式(MD5、0001(RSA))。本篇是用MD5
sign=VRVr7adPfsHblFjiBkGWryhKI
对请求或响应中参数签名后的值。
&direct_trade_create_req&
&subject&彩票&/subject&
&out_trade_no&1&/out_trade_no&
&total_fee&10.01&/total_fee&
&seller_account_name&
&/seller_account_name&
&call_back_url&
/waptest0504/servlet/CallBack
&/call_back_url&
&notify_url&
/waptest0504/servlet/NotifyReceiver
&/notify_url&
&out_user&&/out_user&
&merchant_url&
&/merchant_url&
&pay_expire&3600&/pay_expire&
&agent_id&&/agent_id&
&/direct_trade_create_req&
请求业务参数
subject=彩票
商品名称(不可空)
out_trade_no=1
商户网站唯一订单号(不可空)
total_fee=0.01
交易金额(不可空)
卖家支付宝账号(不可空)
call_back_url=/waptest0504/servlet/CallBack
支付成功跳转页面路径(不可空)
notify_url=/waptest0504/servlet/NotifyReceiver
服务器异步通知页面路径(可空,但是不建议为空)
商户系统用户唯一标识(可空)
merchant_url=
操作中断返回地址(可空)
pay_expire=3600
交易自动关闭时间(可空,默认&#(即15天))。
代理人ID(可空,我不知道这是什么鬼)
/service/rest.htm?req_data=&direct_trade_create_req&&subject&彩票&/subject&&out_trade_no&1&/out_trade_no&&total_fee&10.01&/total_fee&&seller_account_name&&/seller_account_name&&call_back_url&/waptest0504/servlet/CallBack&/call_back_url&&notify_url&/waptest0504/servlet/NotifyReceiver&/notify_url&&out_user&&/out_user&&merchant_url&&/merchant_url&&pay_expire&3600&/pay_expire&&agent_id&&/agent_id&&/direct_trade_create_req&&service=alipay.wap.trade.create.direct&sec_id=0001&partner=7799&req_id=6&sign=VRVr7adPfsHblFjiBkGWryhKIKt+CaI4Cq2MA2wG1ENVuBAyFDlp3FbttndmID0USlfn22a9/6fQ+X+KPDE09hcTNz3gJ1edUiDWxHXY/ahTexCP79SDtoHx29uepXsHBe32DP0k9jZbfhpT8Ly0+ksuo5VJO0iymxQ87hQPjJw=&format=xml&v=2.0
public class AlipayAuth {
// 支付宝网关
private final static String alipayGatewayNew = &/service/rest.htm?&;
private final static String inputCharset = &utf-8&;
private String key = &&;//从支付宝获取的密钥
//接口名称
private final static String service = &alipay.wap.trade.create.direct&;
//请求参数格式
private final static String format = &xml&;
//接口版本号
private final static String v = &2.0&;
//合作者身份id
public String partner = &0000&;//填写从支付宝得到的id
private String reqId;
//签名方式
private final static String secId = &MD5&;
//请求业务参数
private String reqD
//商品名称
//商务网站唯一订单号
private String outTradeNo;
//交易金额
private String totalF
//卖家支付宝账号
private String sellerAccountN
//支付成功跳转路径
private String callBackUrl = &callBack&;
//服务器异步通知页面路径 (可空)
private String notifyUrl = &notify&;
//商户系统唯一标示(可空)
private String outU
//操作中断返回地址(可空)
private String merchantU
//交易自动关闭时间(可空)
private String payE
//代理人id(可空)
private String agentId;
public String getBasePath() {
return baseP
public void setBasePath(String basePath) {
this.basePath = baseP
public String getAlipayGatewayNew() {
return alipayGatewayN
public String getKey() {
public void setKey(String key) {
this.key =
public String getInputCharset() {
return inputC
public String getService() {
public String getFormat() {
public String getV() {
public String getPartner() {
public void setPartner(String partner) {
this.partner =
public String getReqId() {
return reqId;
public void setReqId(String reqId) {
this.reqId = reqId;
public String getSecId() {
return secId;
public String getSign() {
public void setSign(String sign) {
this.sign =
public String getSubject() {
public void setSubject(String subject) {
this.subject =
public String getOutTradeNo() {
return outTradeNo;
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
public String getTotalFee() {
return totalF
public void setTotalFee(String totalFee) {
this.totalFee = totalF
public String getSellerAccountName() {
return sellerAccountN
public void setSellerAccountName(String sellerAccountName) {
this.sellerAccountName = sellerAccountN
public String getCallBackUrl() {
return callBackU
public void setCallBackUrl(String callBackUrl) {
this.callBackUrl = callBackU
public String getNotifyUrl() {
return notifyU
public void setNotifyUrl(String notifyUrl) {
this.notifyUrl = notifyU
public String getOutUser() {
return outU
public void setOutUser(String outUser) {
this.outUser = outU
public String getMerchantUrl() {
return merchantU
public void setMerchantUrl(String merchantUrl) {
this.merchantUrl = merchantU
public String getPayExpire() {
return payE
public void setPayExpire(String payExpire) {
this.payExpire = payE
public String getAgentId() {
return agentId;
public void setAgentId(String agentId) {
this.agentId = agentId;
public void setReqData(String reqData) {
this.reqData = reqD
public String getReqData() {
reqData = &&direct_trade_create_req&&
+ &&subject&& + subject + &&/subject&&//商品名称
+ &&out_trade_no&& + outTradeNo + &&/out_trade_no&&//商户网站唯一订单号
+ &&total_fee&& + totalFee + &&/total_fee&&//交易金额
+ &&seller_account_name&& + sellerAccountName + &&/seller_account_name&&//卖家支付宝账号
+ &&call_back_url&& + callBackUrl + &&/call_back_url&&//支付成功跳转页面
+ &&notify_url&& + notifyUrl + &&/notify_url&&//异步通知页面
//+ &&merchantUrl&& + merchantUrl + &&/merchantUrl&&//操作终端返回地址(可空)
+ &&/direct_trade_create_req&&;
return reqD
获取request_token代码
public String pay() throws Exception {
AlipayAuth alipayAuth = new AlipayAuth();
alipayAuth.setReqId(&请求号:可以用系统当前时间(精确到毫秒),作为一个唯一的请求号&);
alipayAuth.setSubject(&商品名称&);
alipayAuth.setOutTradeNo(&商户网站唯一订单号&);
alipayAuth.setTotalFee(&交易金额&);
Map&String, String& param = getAuthParam(alipayAuth);
// 拼接后字符串
String prestr = PayUtils.createLinkString(param);
// sign签名
alipayAuth.setSign(getSign(prestr, alipayAuth.getKey(), alipayAuth.getInputCharset()));
// 通过授权接口获取token
// 1.拼接url字符串
StringBuffer urlStr = new StringBuffer();
urlStr.append(alipayAuth.getAlipayGatewayNew()).append(prestr).append(&&sign=& + alipayAuth.getSign());
// 2.获取token
return getToken(urlStr.toString(), alipayAuth.getInputCharset());
}获取request_token代码中使用到的
代码块getAuthParam
组成需要生成sign的map集合
private static Map&String, String& getAuthParam(AlipayAuth alipayAuth) {
Map&String, String& param = new HashMap&String, String&();
param.put(&service&, alipayAuth.getService());
param.put(&partner&, alipayAuth.getPartner());
param.put(&_input_charset&, alipayAuth.getInputCharset());
param.put(&sec_id&, alipayAuth.getSecId());
param.put(&format&, alipayAuth.getFormat());
param.put(&v&, alipayAuth.getV());
param.put(&req_id&, alipayAuth.getReqId());
param.put(&req_data&, alipayAuth.getReqData());
return PayUtils.paraFilter(param);
工具类PayUtils.paraFilter(param);
去掉空值与签名参数后的新签名参数组
public static Map&String, String& paraFilter(Map&String, String& sArray) {
Map&String, String& result = new HashMap&String, String&();
if (sArray == null || sArray.size() &= 0) {
for (String key : sArray.keySet()) {
String value = sArray.get(key);
if (value == null || value.equals(&&) || key.equalsIgnoreCase(&sign&)
|| key.equalsIgnoreCase(&sign_type&)) {
result.put(key, value);
工具类PayUtils.createLinkString(param)
&把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
public static String createLinkString(Map&String, String& params) {
List&String& keys = new ArrayList&String&(params.keySet());
Collections.sort(keys);
String prestr = &&;
for (int i = 0; i & keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
prestr = prestr + key + &=& +
prestr = prestr + key + &=& + value + &&&;
代码块getSign(prestr, alipayAuth.getKey(), alipayAuth.getInputCharset())
签名字符串
private static String getSign(String text, String key, String input_charset) {
text = text +
return DigestUtils.md5Hex(getContentBytes(text, input_charset));
代码块getToken(urlStr.toString(), alipayAuth.getInputCharset())
private static String getToken(String urlStr, String charset) throws Exception {
HttpClient httpClient = new DefaultHttpClient();// client
HttpResponse remoteResponse =// response
int responseState = 0;// 返回状态码
BufferedReader bufferedReader =
StringBuilder entityStringBuilder = new StringBuilder();
// url存在非法字符-&需转换成uri
URL url = new URL(urlStr.toString());
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
HttpGet httpost = new HttpGet(uri);// GET
remoteResponse = httpClient.execute(httpost);
if (remoteResponse != null) {
responseState = remoteResponse.getStatusLine().getStatusCode();
if (HttpStatus.SC_OK == responseState) {
// 请求成功
HttpEntity httpEntity = remoteResponse.getEntity();
if (httpEntity != null) {
bufferedReader = new BufferedReader(new InputStreamReader(httpEntity.getContent(), &utf-8&));
String line =
while ((line = bufferedReader.readLine()) != null) {
entityStringBuilder.append(line);
// 请求失败
throw new Exception(&页面访问错误,状态码:& + remoteResponse);
// 从授权页面返回的数据中获取到token
String entityString = URLDecoder.decode(entityStringBuilder.toString(), charset);
String token = getRequestToken(entityString);
代码块getRequestToken(entityString)
解析远程模拟提交后返回的信息,获得token(如果返回错误页面则返回空)
private static String getRequestToken(String text) throws Exception {
String request_token = &&;
// 以“&”字符切割字符串
String[] strSplitText = text.split(&&&);
// 把切割后的字符串数组变成变量与数值组合的字典数组
Map&String, String& paraText = new HashMap&String, String&();
for (int i = 0; i & strSplitText. i++) {
// 获得第一个=字符的位置
int nPos = strSplitText[i].indexOf(&=&);
// 获得字符串长度
int nLen = strSplitText[i].length();
// 获得变量名
String strKey = strSplitText[i].substring(0, nPos);
// 获得数值
String strValue = strSplitText[i].substring(nPos + 1, nLen);
// 放入MAP类中
paraText.put(strKey, strValue);
if (paraText.get(&res_data&) != null) {
String res_data = paraText.get(&res_data&);
// token从res_data中解析出来(也就是说res_data中已经包含token的内容)
Document document = DocumentHelper.parseText(res_data);
request_token = document.selectSingleNode(&//direct_trade_create_res/request_token&).getText();
return request_
上面代码图解
本篇到此结束,敬请期待下篇-------支付宝手机网页即时到账接口(3)之交易接口请求
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有查看: 620|回复: 9
可以啊,只要支付宝有钱就可以。
qwert147258
可以。使用快捷支付或网银都是直接从银行卡支付的。
手机淘宝可以选择银行卡支付,需要绑定银行卡,手机淘宝购物的其实就是先在淘宝上购物,然后用银行卡快捷支付付款,步骤如下: 1、登录手机淘宝,在上面选择想要购买的商品; 2、点击购买,选择支付方式的时候,选择银行卡快捷支付,选择所属银...
手机购物可以用‘’快捷支付‘功能’,付款需要手机短信验证。你需要下载手机淘宝软件和支付宝软件(不下载用网页登录也可以)利用手机号码注册一个淘宝号和一个支付宝号(注册后密码要记住,忘记了可以通过手机号找回密码),把这两个号绑在一起,...
操蛋的人生
必须要去银行开通一张带有网银支付功能的银行卡才能用支付宝付款的。掏宝买东西必须用支付宝,如果没有银行卡,可以选择信用卡。如果支付宝里有钱,直接选择支付宝付款,输入支付宝支付密码就可以了。
你付款的时候可以选择用快捷支付、支付宝支付、其他银行卡支付,三种选择,默认是快捷支付,下次付款前注意选择
选择支付宝担保支付
有的银行卡是不支持该店付款的,如果是支持的 ,请询问银行,付款方式 支付宝 网银 银行卡快捷支付都行的
淘宝担保交易中的代付操作您的支付宝账户没钱或无法自己完成支付,可找亲友代付。操作如下: 1、在淘宝网上拍下商品,在确认购买信息的页面,点击【找人代付】; 或者在【我的淘宝】——【已买到的宝贝】中未付款的交易可以用【找人代付】; 在支...匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。推荐这篇日记的豆列
······

我要回帖

更多关于 java调用支付宝接口 的文章

 

随机推荐