支付宝开发平台——第三方应用授权
制作支付宝AR应用时遇到第三方应用授权,特在此记录下来供有需要的朋友们参考!如有不足,欢迎补充!!!
1、打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用;点击功能信息,添加我们需要的功能:
因为我们的应用没有上线,APPID是无效的,这里阿里给了我们一个解决方案,就是通过沙箱模式进行接口调试,下面我们来配一下我们的沙箱模式:
APPID : 沙箱应用APPID( *正式环境下的APPID :你开发应用的APPID )
支付宝网关:* 沙箱下的网关:/gateway.do
( *正式环境下的网关 : /gateway.do)
RSA2(SHA256)密钥(推荐) : (配置过RAS2就可以不用配置RAS1了) 生成RSA密钥方法可参照支付宝文档 :https://doc./docs/doc.htm?treeId=291&articleId=105971&docType=1
应用网关:用于接收支付宝异步通知,如口碑开店中的开发者门店被动通知;实际使用时配置;
授权回调地址:授权url中的redirect_uri必须与此值相同
AES密钥:目前不再使用
(应用网关和授权回调地址,这里因为是本地调试)
做好这些准备工作我们就可以开始进行我们的具体功能实现了,首先我打开支付宝开发平台开发文档,点击基础能力->第三方应用授权,阅读一遍内容,我回到文档的第三步:
注意这里的app_id要填写沙箱应用的ID,不然是无法完成调用支付登录页面的。
url 拼接: /oauth2/appToAppAuth.htm?app_id=沙箱应用APPID&redirect_uri=http://127.0.0.1:8080/aliar_tools/aliar/aliartest.action
下面java后端业务处理:(struts2 框架)
import org.apache.struts2.ServletActionContext;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayOpenAuthTokenAppRequest;
import com.alipay.api.response.AlipayOpenAuthTokenAppResponse;
import com.opensymphony.xwork2.ActionSupport;
public class AliArTestAction extends ActionSupport{
private static final long serialVersionUID = 1L;
/*APPID*/
private static final String APP_ID = "20***50023260";
/*应用私钥 —— 本地生成的私钥*/
private static final String APP_PRIVATE_KEY = "应用私钥2048";
/*支付宝公钥 —— 应用公钥对应的支付宝公钥*/
private static final String ALIPAY_PUBLIC_KEY = "支付宝公钥";
/*访问应用授权URL时会自动生成 app_auth_code
* url 拼接: /oauth2/appToAppAuth.htm?app_id=081500253260&redirect_uri=http://127.0.0.1:8080/aliar_tools/aliar/aliartest.action
*/
private String app_auth_code;
public String getApp_auth_code() {
return app_auth_code;
}
public void setApp_auth_code(String app_auth_code) {
this.app_auth_code = app_auth_code;
}
public String aliartest(){
String str = "";
System.out.println("app_auth_code = "+app_auth_code);
/*
* 正式环境下的网关 : /gateway.do
* 沙箱下的网关:/gateway.do
*/
// AlipayClient alipayClient = new DefaultAlipayClient("/gateway.do",APP_ID,APP_PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY,"RSA2");
AlipayClient alipayClient = new DefaultAlipayClient("/gateway.do",APP_ID,APP_PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY,"RSA2");
AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest();
/*
* grant_type : 授权类型 ; 如果使用app_auth_code换取token,则为authorization_code,如果使用refresh_token换取新的token,则为refresh_token
* code : 授权码 ; 与refresh_token二选一,用户对应用授权后得到,即第一步中开发者获取到的app_auth_code值
* refresh_token : 刷新令牌 ; 与code二选一,可为空,刷新令牌时使用
*/
request.setBizContent("{" +
"\"grant_type\":\"authorization_code\"," +
"\"code\":\""+ app_auth_code +"\"" +
// "\"refresh_token\":\""+ refresh_token +"\"" +
"}");
AlipayOpenAuthTokenAppResponse response;
try {
response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
str = response.getBody();
System.out.println(response.getBody());
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
str = "{\"resultCode\":-1,\"resultDesc\":\"aliartest异常\",\"res\":[]}";
}
ServletActionContext.getRequest().setAttribute("userXml",str);
return SUCCESS;
}
}
===============
授权后页面响应:
{
"alipay_open_auth_token_app_response":{
"code":"10000",
"msg":"Success",
"app_auth_token":"44f3904de393dafaf8ae3b4X8",
"app_refresh_token":"201b9c16be43bfd4b6d86d82752F58",
"auth_app_id":"20****50023260",
"expires_in":31536000,
"re_expires_in":32140800,
"user_id":"217112581"
},
"sign":"oMt87ixU/6BmMokewP1ytRiShfk5K3356mp+F6TRbaNZi403FIMSNnf42Ae9/IQWAmDED6VD4KNN8rCs3y0ANQ/OUr4XGVA9R+HaVbX99rlh3ysEOxTyLQwgg8Ek06ZrBoe7LsQ5pVCytcsoQ4MZcP9GkoQ=="
}
注意:代码中使用的公钥 为: 支付宝公钥,不是本地生成的公钥
jdk下载地址:https://doc./docs/doc.htm?spm=a219a.7629140.0.0.bj1TCE&treeId=54&articleId=103419&docType=1