背景:
  • 最近需要利用支付宝中alipay.trade.create 这个接口,做企业版固定收款码。(我们作为服务商)。
  • 在交易过程中,发现需要上送buyer_id,辗转多处得知,buyer_id就是用户的user_id,需要使用用户信息授权接口https://docs.open.alipay.com/289/105656。
  • 注意:如果在用户无感的情况下获取user_id,需要将scope参数传入auth_base是静默授权。(开始就是这个错了,导致一直需要用户点击授权)。
      参考:https://openclub.alipay.com/read.php?tid=7078&fid=72&ant_source=zsearch
    下面开始写完整步骤,步骤有点繁琐,逐步耐心地对着沙箱看:
1. 首先申请沙箱环境。
  • 1.1. 进入支付宝开放平台(https://docs.open.alipay.com/200/105311),点击蓝色沙箱字样后进入登录界面,使用个人账户登录,选择自主研发者,注册后得到沙箱环境的PID(即UID)和APPID。

  • 1.2按照操作指南,设置公钥。

  • 1.3 设置授权回调地址。

    这个地址,只要求配置到域名就行

  • 1.4 授权回调地址作用:
    我们的授权分为2步。总体说 拼接授权链接—>发送接口alipay.system.oauth.token接口

  • 1.4.1 第一步,拼接授权链接
    拼接授权链接(链接中有redirect_url, redirect_uri与应用配置的授权回调地址域名部分必须一致),访问该链接,支付宝会把响应参数auth_code回调跳转到这个redirect_url上。。这一步获取到auth_code,并保存。
    示例授权链接:https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=2016101800718925&scope=auth_base&redirect_uri=https%3A%2F%2Fwww.baidu.com%2F
    注意:

    • a. 沙箱环境,是alipaydev.com 正式的是alipay.com。
    • b. 链接中的scope一定设置为auth_base。才能做到用户无感知,不需要手动点击授权应用。
  • 1.4.2 第二步,利用第一步获取到的auth_code,发送接口alipay.system.oauth.token。既可以得到user_id。代码如下。

//https://openapi.alipaydev.com/gateway.do 。莫要跟正式环境弄混。正式的不带dev
//APP_ID位沙箱里面写的appid。APP_PRIVATE_KEY为自己的私钥,用于报文签名.  ALIPAY_PUBLIC_KEY 这个是支付宝公钥,用于验签
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode("2e4248c2f50b4653bf18ecee3466UC18");//这个就是第一步获取的auth_code
request.setGrantType("authorization_code");//这个固定值,参考https://docs.open.alipay.com/api_9/alipay.system.oauth.token
try {AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);System.out.println(oauthTokenResponse.getBody());System.out.println(oauthTokenResponse.getUserId());
} catch (AlipayApiException e) {//处理异常e.printStackTrace();
}

打印如下,返回user_id:2088102176179015

{"alipay_system_oauth_token_response":{"access_token":"authbseB943644a58e6242acb91078770da52X01","alipay_user_id":"2088102176179015","expires_in":1296000,"re_expires_in":31536000,"refresh_token":"authbseB14f174b8ef314050a4f3682066fd2A01","user_id":"2088102176179015"},"sign":"GgOx60CAy56LvQ8TPnaTZqUZfvgvFnlvwLH2I3XJ6vfygBqbf0gqBkfI1krVZ702XTLRwfExcUW7D6Wlprz/u+AF4YBUhaMhbXXp9D/MOO/Kn7ITti3g3qsltLU2uK3WIDG9Jn86kNUnencrxw2fmBSeCMZv20C6WQhZtc76U7hEEVM+7Qys4glYVtM8pFIq1F4GSP0FY6xXQPYKfBGq5R5VTNLOz4I1t3ynuVPu8iZprCEPRpybNXBLAW3Pny27LWsIbo2wSeCKW6SR/Z8JaIVl+0uHTbm3O2357e01k8aA1dwSfk+0XfZqpHk6bJ2NjD5Yt6QqoA2zatmXMHdfgQ=="}2088102176179015
  • 1.5 思考,如何做固定收款码?
    分为2步
  • 1.5.1 我们在拼接授权链接时,可以把后面的redirect_url,配置成我们自己的h5支付页面,那么,当用支付宝扫码访问这个链接后,支付宝会自动返回到这个h5支付页面,回调带参数auth_code,此时我们就已经获取到了auth_code。
    注:链接中还有个参数state。需要的业务参数可以统一通过state参数传递。如果该二维码的对应商户号。当然也可以拼在redirect_url后面。
  • 1.5.2接着在当前h5页面填写金额,然后发后台交易,可以在后台连续发2步接口,先发上面的alipay.system.oauth.token接口,利用上一步的auth_code获取到user_id,即buyer_id;再发下单接口alipay.trade.create。 返回trade_no
  • 1.6 利用1.5接口返回的trade_no,唤醒支付宝。唤醒js使用支付宝自带的方法。https://docs.open.alipay.com/common/105591
    https://openclub.alipay.com/read.php?tid=248&fid=56&ant_source=zsearch
    https://myjsapi.alipay.com/alipayjsapi/
    为方便阅读,这里写了个现成的。只需要把tradeNo代入。支付宝内扫码访问该页面,页面内即可唤醒支付宝支付
<html>
<head><script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script><script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script><script type="text/javascript">// 调试时可以通过在页面定义一个元素,打印信息,使用alert方法不够优雅function log(obj) {$("#result").append(obj).append(" ").append("<br />");}$(document).ready(function(){// 页面载入完成后即唤起收银台// 此处${tradeNO}为模板语言语法,实际调用样例类似为tradePpay("2016072621001004200000000752")tradePay("2018061321001004010200659043");//这里就是tradeNo});// 由于js的载入是异步的,所以可以通过该方法,当AlipayJSBridgeReady事件发生后,再执行callback方法function ready(callback) {if (window.AlipayJSBridge) {callback && callback();} else {document.addEventListener('AlipayJSBridgeReady', callback, false);}}function tradePay(tradeNO) {ready(function(){// 通过传入交易号唤起快捷调用方式(注意tradeNO大小写严格)AlipayJSBridge.call("tradePay", {tradeNO: tradeNO}, function (data) {log(JSON.stringify(data));if ("9000" == data.resultCode) {log("支付成功");}});});}</script></head>
<body>
</body>
</html>

支付宝如何获取buyer_id (即user_id)。支付宝服务窗(生活号)支付方式相关推荐

  1. 支付宝如何获取buyer_id,我来告诉你

    支付宝如何获取buyer_id?我来告诉你 你知道你的支付宝如何获取buyer_id (即user_id)吗?如果你不知道的话,那么你所有的一些自媒体的收款是无法完成的.既然如此,今天一起来看一下,如 ...

  2. 支付宝服务窗关注 html,支付宝服务窗/生活号/小程序二次开发

    支付宝服务窗/生活号/小程序二次开发 什么是支付宝生活号: 支付宝生活号是支付宝为企业.组织和个人提供的直接触达用户的服务平台,入驻商户可以通过此平台对用户进行信息推送.交易场景打通和会员服务管理.支 ...

  3. 支付宝Html授权,网页版的支付宝授权登录(vue+java)

    api接口文档:https://docs.open.alipay.com/289/105656 后台管理系统原本是用账号密码登录的,不过需求要改成支付宝授权, 前端仅仅需要改登录页,以及添加一个授权返 ...

  4. c# 支付宝生活号 获取用户信息,不使用dome

    在蚂蚁开放平台注册申请应用上线 如果你只想看代码,直接跳至最后一步 申请过程就不多说了,申请完成后是 已上线 状态就ok了 下载支付宝开放平台开发助手,生成秘钥 点到生成密匙页面,根据自己需求选择密匙 ...

  5. 支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java

    直接上干货,下面中间有一些 我自己的业务逻辑,比如businesscode,你们可以去掉,我要支持多个生活号做的. <dependency><groupId>com.alipa ...

  6. java 实现获取支付宝授权获取会员信息

    1.配置支付宝所需参数 2.实现类 Java根据获取到的参数,拼接起来返回给安卓,让安卓调用支付宝授权获取会员信息: @ApiOperation(value = "拼接支付宝授权页面所需参数 ...

  7. java支付宝网页授权登录界面_支付宝开发平台之第三方授权登录与获取用户信息...

    对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ.微信.新浪.支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录. 打开支付宝开发平台,注册成为开发者,点击开发者中心 ...

  8. java获取芝麻信用授权_支付宝授权获取芝麻信用分数

    貌似好久没写文章了,今天来记录下最近用支付宝SDK获取芝麻信用分数的过程,以及踩过的坑. 个人感觉接芝麻信用分数时还是很简单的,基本都是服务端的任务,我们这边只需要将从支付宝授权获取的auth_cod ...

  9. android 支付宝 targetid,支付宝授权获取芝麻信用分数-芝麻小程序-小程序码在线生成...

    1. 貌似好久没写文章了,今天来记录下最近用支付宝SDK获取芝麻信用分数的过程,以及踩过的坑.2. 个人感觉接芝麻信用分数时还是很简单的,基本都是服务端的任务,我们这边只需要将从支付宝授权获取的aut ...

最新文章

  1. 主成分分析(PCA)Python代码实现
  2. SLAM/检测跟踪/多传感器融合方向实习生招聘 | 腾讯Robotics X实验室
  3. Android开源项目分类汇总-转载
  4. 60%的安卓APP存在漏洞,平均每个有39个漏洞
  5. mysql创建只读权限用户_新品速递 | Harbor 修复权限提升漏洞,MySQL Plus 支持密码强度校验以及审计功能...
  6. 大数据处理时的一种BitMap小算法
  7. PHP格式化全国省市区列表
  8. Spring思维导图,让Spring不再难懂(cache篇)
  9. show部分书...
  10. 微信公众平台PHP开发
  11. 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
  12. 从编译器角度分析C语言中数组名和指针的区别
  13. Hibernate 关联映射
  14. mysql 外键 150_mysql之创建外键报150错误的处理方法
  15. 算法:874. 模拟行走机器人
  16. 手机语音混响软件_Tone2 UltraSpace(音频混响软件)
  17. java UCI,UCI数据集
  18. C++打卡17-【排序模板】选择排序
  19. android布局置顶_android linearlayout imageview置顶摆放
  20. win10笔记本电脑初始化失败以及QQ能上网页打不开问题

热门文章

  1. 看不见的养车成本——热门车易损件大调查
  2. 什么样的内容会更吸引用户?
  3. mybatis_plus插件——生成器
  4. linux complete,Linux内核API complete_all
  5. Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
  6. 3200亿家庭光伏市场蛋糕 中民投S2B模式能抢多少
  7. 中安威士:刑事司法系统中大数据的双刃剑
  8. 【部署】外网访问家庭计算机( 内网穿透)
  9. 基于SSM的社会救助信息管理 毕业设计-附源码211633
  10. ZWAVE通过Alarm TypeSupported Get Command获得设备支持的告警类型