请教关于使用支付宝开放平台(API)遇到的问题。【附代码】急。。。

Netcean 2016-03-08 06:26:04
需求:想通过开放平台提供的“alipay.user.trade.search”来查询帐户的交易记录。

按支付宝开放平台的文档介绍,要实现站外读取支付宝帐户交易记录,需要做的步骤如下:
1、需要用户授权,
2、授权后得到auth_code,
3、再凭auth_code换取access_token及用户userId,
4、最后通过获取到的access_token值通过alipay.user.trade.search接口来读取帐户的交易记录

现在已经做到第3步,获取到了access_token及用户userId,但进行第4步读取交易记录时提示“无效的访问令牌”

问:难道是第3步获取到的access_token不是令牌?

==========================
相关资料:

alipay.user.trade.search (查询支付宝账户交易记录)
https://doc.open.alipay.com/doc2/apiDetail.htm?spm=a219a.7629065.0.0.IN9e2r&apiId=941&docType=4#s6

网页授权获取用户信息
https://doc.open.alipay.com/doc2/detail.htm?treeId=115&articleId=104114&docType=1
==================================


附上我的代码吧:

string Alipay_APPID = "20160xxxxxxxxxxxx";
string Alipay_RSAPrivate = "MIICXQxxxxxx";
string Alipay_TokenT = "";
string Alipay_ReToken = "";
string Alipay_Code = "0a844a1f6a544acf838a910b25aaYX45";
string Alipay_ReTokenT = "";
string Alipay_Token = "";

string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string start_time = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
string time_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
byte[] privateKey = Convert.FromBase64String(Alipay_RSAPrivate);
RSACryptoServiceProvider rSACryptoServiceProvider = Cean.Common.RSA_Str.RSASignData(privateKey);
XmlDocument xmlDocument = new XmlDocument();
string para = "app_id=" + Alipay_APPID;
para += "&charset=GBK";
para += "&code=" + Alipay_Code;
para += "&format=xml&grant_type=authorization_code";
para += "&method=alipay.system.oauth.token&sign_type=RSA";
para = para + "×tamp=" + timestamp;
para += "&version=1.0";

string sign_temp = Convert.ToBase64String(rSACryptoServiceProvider.SignData(Encoding.Default.GetBytes(para), "SHA1"));
string urlHtml = Utils.GetUrlHtml("https://openapi.alipay.com/gateway.do", "GBK", para + "&sign=" + HttpUtility.UrlEncode(sign_temp, Encoding.GetEncoding("GBK")));

xmlDocument.LoadXml(urlHtml);
if (xmlDocument.SelectNodes("/alipay_system_oauth_token_response").Count > 0)
{
//*************这边可以读取到access_token及用户userId等信息
Alipay_Token = xmlDocument.SelectNodes("/alipay_system_oauth_token_response")[0]["refresh_token"].Innerpara.ToString();
}


para = "app_id=" + Alipay_APPID;
para += "&auth_token=" + Alipay_Token;
para += "&charset=GBK&end_time=" + time_end;
para += "&format=xml&method=alipay.user.trade.search&order_from=TAOBAO";
para += "&page_no=1&page_size=30&sign_type=RSA";
para += "&start_time=" + start_time;
para += "×tamp=" + timestamp;
para += "&version=1.0";
str4 = Convert.ToBase64String(rSACryptoServiceProvider.SignData(Encoding.Default.GetBytes(para), "SHA1"));
urlHtml =Utils.GetUrlHtml("https://openapi.alipay.com/gateway.do", "GBK", para + "&sign=" + HttpUtility.UrlEncode(str4, Encoding.GetEncoding("GBK")));
//****************执行上一句时就会提示“无效的令牌访问”,不知是哪里出了问题。**************



以下是执行到上面代码最后一句时(Utils.GetUrlHtml)同步返回的提示:

<?xml version=\"1.0\" encoding=\"GBK\" ?><error_response><code>20001</code><msg>Insufficient Token Permissions</msg><sub_code>aop.invalid-auth-token</sub_code><sub_msg>无效的访问令牌</sub_msg><sign>Ra1OgQUjsIdl8t7v9r1jITDxLb71wEZYLm69vCMRwZGn3jRLV4SAE01zxwmBcuo0/yq5LomUkxw5dnWuRur2MX4H/gzjGPvzSrqgMBR46XcNtvAVMvgGVxmMNn0/NCdgLmvaf4cgo7jteNymKfEbPXU6zbReVaS6AbUQrB7KcME=</sign></error_response>"


请教大家,是哪里出了问题,步骤吗?还是哪个值获取或设置的不对?
...全文
29626 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有人同步淘宝会员出现问题吗?接口只能请求8000条数据=-=改怎么处理呢?
hi,我来啦 2018-06-14
  • 打赏
  • 举报
回复
引用 15 楼 ming_cao 的回复:
看错了, 是获取用户信息时要这样搞, alipay.user.info.share -> auth_user alipay.user.userinfo.share->auth_userinfo
alipay.user.info.share -> auth_user 新版接口 alipay.user.userinfo.share->auth_userinfo老版接口
_花落知多少 2017-11-20
  • 打赏
  • 举报
回复
引用 14 楼 ming_cao 的回复:
scope参数的值 从 auth_user 换成 auth_userinfo 就ok了。 那个官方文档写错了。 哈哈哈哈, 是不是拯救了你们。
支付宝真几把坑
hzryzjss 2017-10-31
  • 打赏
  • 举报
回复
我解决了, 我遇到这个问题是获取芝麻信用评分接口 ,因为授权用户之前用其他scope授权过,把scope换成auth_zhima,然后换个用户授权就好了,之前授权的用户可以在客户端 取消授权 再重新授权就好了
ming_cao 2017-09-20
  • 打赏
  • 举报
回复
看错了, 是获取用户信息时要这样搞, alipay.user.info.share -> auth_user alipay.user.userinfo.share->auth_userinfo
ming_cao 2017-09-20
  • 打赏
  • 举报
回复
scope参数的值 从 auth_user 换成 auth_userinfo 就ok了。 那个官方文档写错了。 哈哈哈哈, 是不是拯救了你们。
JeasonZF 2017-08-08
  • 打赏
  • 举报
回复
楼主解决了吗?我也遇到相同的问题
账号已弃用5.5 2016-07-17
  • 打赏
  • 举报
回复
支付宝开放平台的客服告诉我,现在很多API都无法正常使用。说关注官网公告。
wxliangzyt 2016-07-16
  • 打赏
  • 举报
回复
楼主,你能你第一,第二,第三巾出来吗,我也搞了很久,都无法实现, 我的email:38200180@qq.com
wxliangzyt 2016-07-16
  • 打赏
  • 举报
回复
我现在也是:无效的访问令牌,们是怎么解决的,分享出来
qq_34372136 2016-03-21
  • 打赏
  • 举报
回复
我也遇到这个问题了, 无效的访问令牌,LZ问题解决了吗?
newtee 2016-03-10
  • 打赏
  • 举报
回复
这接口query_trade_list_partner 开个权限 然后用partnerid就可以查交易状态了
newtee 2016-03-10
  • 打赏
  • 举报
回复
想查问下支付宝客服 不需要这样的 有个这个接口 query_trade_list_partner 这个接口alipay.user.trade.search 得通过auth2.0获取授权 首先得在网页上操作 然后支付宝会把code回调到你指定的域名下 然后你可以暂时把这个code保存起来 然后就简单了(获取授权,查询交易)
biz_xx 2016-03-10
  • 打赏
  • 举报
回复
你确定你的令牌参数传上去了?
Netcean 2016-03-09
  • 打赏
  • 举报
回复

string app_id = "201603040xxxxxxx";
string merchant_private_key = Server.MapPath("/t/rsa_private_key.pem");
string alipay_public_key = Server.MapPath("/t/rsa_public_key.pem");
IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", "GBK", alipay_public_key);
AlipayUserTradeSearchRequest request = new AlipayUserTradeSearchRequest();
request.StartTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
request.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
request.OrderType = "TRADE";
request.OrderStatus = "TRADE_FINISHED";
request.OrderFrom = "TAOBAO";
request.PageNo = "1";
request.PageSize = "100";
AlipayUserTradeSearchResponse response = client.Execute(request);


以上是使用支付宝提供的sdk代码,访问时还是会提示“无效的访问令牌”
rsa_private_key.pem和rsa_public_key.pem文件是通过openssl生成的
并且把rsa_public_key.pem里面的值复制到下面图片中的地方(应用公钥)



请教,这要怎么办?谢谢
Netcean 2016-03-09
  • 打赏
  • 举报
回复

string app_id = "201603040xxxxxxx";
 string Alipay_Code = "71f2866496c84cf3ba1c9bab0555UB45";
            string merchant_private_key = Server.MapPath("/t/rsa_private_key.pem");
            string alipay_public_key = Server.MapPath("/t/rsa_public_key.pem");//RSA
            IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", "1.0", "RSA"); 

            #region 获取access_token
            AlipaySystemOauthTokenRequest request_oauth = new AlipaySystemOauthTokenRequest();
            request_oauth.GrantType = "authorization_code";
            request_oauth.Code = Alipay_Code;
            AlipaySystemOauthTokenResponse response_oauth = client.Execute(request_oauth);
            #endregion

            AlipayUserTradeSearchRequest request = new AlipayUserTradeSearchRequest();
            request.StartTime = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
            request.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            request.OrderType = "TRADE";
            request.OrderStatus = "TRADE_FINISHED";
            request.PageNo = "1";
            request.PageSize = "100";
            AlipayUserTradeSearchResponse response = client.Execute(request, response_oauth.AccessToken);
顶上去,有没人在啊,帮忙看下为什么会返回:“无效的访问令牌” 谢谢各位了。
Netcean 2016-03-08
  • 打赏
  • 举报
回复
用sdk测试,也是返回“无效的访问令牌”
Poopaye 2016-03-08
  • 打赏
  • 举报
回复
明明有.net的sdk不用,非要自己搞,结果应该访问哪个地址都搞不清了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧