场景需求:

通过支付宝扫描二维码进入手机H5网站,获取用户唯一标识appid来标识用户以及处理逻辑。一系列操作后,调起支付窗口完成支付宝支付

1、支付宝开放平台配置

1、登陆支付宝开放平台中心,选择“ 网页&移动应用 ”,然后创建一个应用。此时该应用的状态为开发中,需要我们添加一些功能和信息后去审核,审核通过就成了已上线。就可以开始使用了。


这里我们只需要两项功能:1、手机网站支付;2、用户信息授权
除此之外还需要配置一下开发设置,如下图:

具体配置可以参照上面官方的文档来。
我这里只配了一个接口加签方式(支付使用),加签方式有两种,一种是普通加签——需要设置支付宝公钥。另一种是证书加签方式。这个有点复杂,看个人需求,具体参照官方文档。
我这里选择普通加签方式,按照官方文档的指示,下载了一个“ 支付宝开放平台开发助手 ” 的软件用来生成相应的应用公钥和应用私钥


首先,用上面这个工具生成一对密钥,这里叫做应用私钥和应用公钥。我们要做的就是 保存 好这对密钥!!!。普通加签方式就是把这里的应用公钥上传(复制粘贴)到配置里面,然后旁边会有个生成支付宝公钥的按钮,点击生成支付宝公钥。然后把这段支付宝公钥保存下来。跟之前应用私钥和应用公钥一起。后面支付会用到。

接下来就是配置授权回调地址。:这个回调地址就是我们做用户信息授权登陆的时候用到的。这里要配置一个正规的可访问域名。支付宝会检测的。
这里简单介绍一下这个回调地址有什么用。首先我们得知道用户信息授权的流程:用户通过特定规则拼接传输数据到支付宝指定授权地址(url),支付宝校验你传输的数据,通过的话就会给你返回一个auth_code。我们再通过返回过来的auth_code去换取支付宝用户唯一标识appid。拿到这个appid。我们就完成了授权。
上面返回的auth_code就是在支付宝校验我们传输的数据后,会请求我们后台配置的授权回调地址。然后会在url后面带上auth_code
简单来说就是:我们请求支付宝,支付宝通过后会访问我们配置的授权回调地址来将auth_code返回给我们。

配置这一块就结束了。总共配置两个地方:一个加签方式(支付使用),一个授权回调地址(授权使用)。完成后我们就可以提交,等待审核了。(所有功能都必须审核通过才能使用)

用户信息授权

上面我们基本配置了授权所需要的配置,其实就只配置一个授权回调地址来获取返回的auth_code。
先上代码后讲解:

redirectForAliCode() {goodsApi.getAliSign().then(res => {//授权需要用到开放平台里我们创建应用的appid。不是用户appid。const rr = res.data;const redirectUrl = window.location.href;var result = redirectUrl.match(/=(\S*)#/)[1];var results = result.match(/(\d*)/)[1];let param = 'app_id=' + rrparam += '&scope=auth_base'//可参考文档,因为我们只要授权,所以,这里只写auth_base//下面的redirect_uri值必须经过URLENCODE转义,不能明文传输param += '&redirect_uri=' + encodeURIComponent('http://****.com')//这里写我们后台配置的授权回调地址param += '&state='+results                                //一定要一模一样,否则授权会失败console.log('url:', 'https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?'+ param);window.location.href = 'https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?' + param;//支付宝授权指定url}).catch(err => {})}

通过该代码调用获取auth_code后,我们再通过这个auth_code去换取appid

public Map<String, Object> getPrivateAccessToken(String code) {//之前拿到的auth_codeAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.URL,//支付宝apialipayConfig.APPID,alipayConfig.RSA_PRIVATE_KEY,alipayConfig.FORMAT,alipayConfig.CHARSET,alipayConfig.ALIPAY_PUBLIC_KEY,alipayConfig.SIGNTYPE);AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();request.setCode(code);request.setGrantType("authorization_code");Map map = Maps.newHashMap();try {AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);logger.info("AccessToken:"+oauthTokenResponse.getAccessToken());logger.info("UserId:"+oauthTokenResponse.getUserId());map.put("AccessToken",oauthTokenResponse.getAccessToken());map.put("UserId",oauthTokenResponse.getUserId());} catch (AlipayApiException e) {//处理异常e.printStackTrace();logger.info("获取userID异常,信息如下:"+e.getErrMsg());}return map;}

通过上面这个代码,可以换取到auth_code。上面创建支付宝api实例的时候有几个参数。
URL:固定请求地址。
APPID:应用appid。
RSA_PRIVATE_KEY:还记得之前保存的应用私钥吗。这里用到了。
FORMAT:格式,只支持json。
CHARSET:编码,只支持UTF-8。
ALIPAY_PUBLIC_KEY:之前配置加签方式保存下来的支付宝公钥
SIGNTYPE:签名类型,固定:RSA2

至此,我们的appid就拿到了,用户授权信息功能也完成了。接下来就是业务逻辑的一些处理了。(上面授权的这些参数待会支付接口也会用到。)

手机网站支付

下面就到了支付环节了,首先我简单说下支付的大概流程:
我们整理一下订单数据,通过调用支付宝api,然后返回一个form表单,我们再把得到的form表单放到页面上自动提交,就会调起支付密码框,输入密码后就支付完成。

整个支付接口,我分为两个阶段

1、支付准备阶段:

这里最少需要准备两个订单数据字段,一个是我们的业务系统订单号(不可重复哟)。再一个就是支付的金额了(单位是元,最小到分)。

public String aliPay(String orderSn,Double monery){AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.URL,alipayConfig.APPID,alipayConfig.RSA_PRIVATE_KEY,alipayConfig.FORMAT,alipayConfig.CHARSET,alipayConfig.ALIPAY_PUBLIC_KEY,alipayConfig.SIGNTYPE);AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();//支付成功与否回调通知地址request.setNotifyUrl(alipayConfig.notify_url);//支付完成后自动返回的地址(一般为作我们的业务系统自定义的查询是否支付页面)request.setReturnUrl(alipayConfig.return_url+orderSn);request.setBizContent("{" +"\"subject\":\"随便写个名称,用作支付宝后台报表查询标识的\"," +"\"out_trade_no\":\""+orderSn+"\"," +"\"total_amount\":"+monery+"," +"\"product_code\":\"QUICK_WAP_WAY\"" +"  }");AlipayTradeWapPayResponse response = null;try {response = alipayClient.pageExecute(request);//这里会返回一个form表单(调起支付框--这个框就是我们平时用支付宝支付,输密码的框)String result = response.getBody();logger.info(result);return result;} catch (AlipayApiException e) {e.printStackTrace();}if(response.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}return null;}

这上面构造支付宝api实例的参数跟上面获取授权一样。不同的是支付这里,必须得传一个支付是否成功的回调通知地址,以及一个支付完成后的返回地址。(支付宝这里跟微信jsapi支付不同,是要我们自己将地址传到支付宝后台,由他们来请求我们的地址。)
我们拿到form表单后,把这个表单返回给前台自动提交。

<form name="punchout_form" method="post" action="">
<input type="hidden" name="biz_content" value="{&quot;subject&quot;:&quot;深圳校服&quot;,&quot;out_trade_no&quot;:&quot;20200513085536016569&quot;,&quot;total_amount&quot;:0.01,&quot;product_code&quot;:&quot;QUICK_WAP_WAY&quot;  }">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

生成的form表单大概是这个样子。

aliPrepare(){//前台传订单号去后台,后台查出订单金额传给支付宝api,返回一个form表单payApi.aliPrepare(this.order.orderNo).then(res => {// 存储微信支付数据datalet data = res.data//返回的form表单console.log("即将跳转支付宝支付,返回的数据为:"+data)const div = document.createElement('div');div.innerHTML = datadocument.body.appendChild(div)document.forms[0].submit();//这些document操作应该不用过多解释了=-=}).catch(err =>{Toast('系统异常,青稍后再试')Toast(err)})},

执行完这个js后就会自动弹出一个支付框啦。支付准备阶段就完成了。

2、支付完成阶段

在我们输入密码完成支付后,(页面):支付宝会请求我们支付的时候传的return_url地址
(后台):支付宝会调用我们传过去的通知回调NotifyUrl地址
如何处理回调通知。官方文档里有demo。这里就不做展示了。
支付宝手机网站demo
我这里由于用的是springboot。所以直接返回即可

 /*** 支付宝支付回调* @return*/@RequestMapping(value = "ali/notify",method = RequestMethod.POST)public String aliNotify(){logger.info("开始进入支付宝支付的回调,地址:ali/notify");String  msg = aliPayService.resultNotify();logger.info("支付宝回调返回:"+msg);String jsonmes = JSON.toJSONString(msg);logger.info("支付宝回调返回(fast处理):"+jsonmes);return msg;//直接返回success,不要带任何东西,否则会一直回调}

问题一
由于maven中央仓库里没有支付宝的api。所以我们需要手动下载jar。提取码为:gt05

springboot的话,只需要这一个jar包就可以。
然后自己导入进maven仓库里。具体步骤可以自行百度,将jar打进你本地的maven仓库后就可以正常导入pom文件使用。
pom文件展示:

 <!-- alipay --><dependency><groupId>com.alipay</groupId><artifactId>sdk-java</artifactId><version>4.9.3</version></dependency>

至此,支付宝授权登陆,支付接口就完成了。

实战操作建议配合官方文档一起,便于自己深刻理解。

如对上面有疑问的可以评论留言,看到会解答。

手机H5如何对接支付宝登陆授权以及支付(H5网站支付)相关推荐

  1. 支付宝支付 - 电脑网站支付

    目录 1. 支付宝支付 - 配置 2. 支付宝支付 - 电脑网站支付 一.引用dll 二.发起支付 /// <summary> /// 支付 /// </summary> // ...

  2. 支付宝html5接入,app和h5怎样对接支付宝支付接口?

    1.支付宝开放平台https://open.alipay.com 新增应用并签约手机网站支付/APP支付. 2.服务端使用java, 集成支付宝sdk. 3.为方便以后更多支付方式扩展, 先定义接口, ...

  3. django手机访问_Django对接支付宝电脑网站、App支付步骤详解!这个框架是真强!...

    一.前言 本文主要针对 Python for Django 在对接支付宝电脑网站.手机网站.App支付过程中具体实现步骤进行详解: 相信大家支付功能也写了不少,但时间一长,再次用到的时候有些细节难免会 ...

  4. Android平台以WebView方式集成H5+SDK和支付宝登录授权插件开发思路总结

    首先附上Demo地址,大家可以去GitHub上面下载https://github.com/GitLGH/AlipayDemo 一:思路总结 蚂蚁金融开发平台上面对于支付宝登录授权部分使用的原生andr ...

  5. 支付宝支付-电脑网站支付

    官方文档 支付接口(alipay.trade.page.pay): 商户系统请求支付宝接口alipay.trade.page.pay,支付宝对商户请求参数进行校验,而后重定向至用户登录页面. 用户确认 ...

  6. Java之支付宝支付(电脑网站支付)沙箱测试版

    支付宝支付流程及注意事项(沙箱测试版) 一:支付宝支付接入准备工作: 首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业 ...

  7. 支付宝:web页面扫码支付、网站支付、支付宝即时到账 + springmvc

    一.场景:公司需要在网站上进行支付宝支付. 二.API:使用支付宝开放平台的支付能力-即时到账接口.支付宝开放平台链接 三.分析: 1.支付宝的文档比较容易看,主要是有相应的DEMO,我这里看的DEM ...

  8. 支付宝支付-电脑网站支付开发

    公司产品需要做一个订单系统,需要在线下单支付功能,由于时间紧,任务重,选择了阿里的电脑网站支付作为支付的手段接入.一定要区分阿里的扫码支付和电脑网站支付的区别,刚开始我就搞混了.网站支付的页面类似于下 ...

  9. 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结

    前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...

  10. node.js对接支付宝沙箱,看这篇足够

    前言:node对接支付宝沙箱的心得,express,koa2都能使用. 支付宝沙箱位置在:支付宝开放平台控制台>开发工具推荐>沙箱 引入alipay-sdk npm install ali ...

最新文章

  1. 《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——第1章 系统•嵌入•硬件 01-01 Welcome on board!...
  2. pack_padded_sequence 和 pad_packed_sequence
  3. 中国人工智能学会通讯——基于视频的行为识别技术 1.7 视频的深度分段网络...
  4. 【转】使用python进行多线程编程
  5. bash type php,Linux Bash Shell 寻找PHP(网站)挂马,后门
  6. 《信息安全系统设计基础》实验一 开发环境的熟悉
  7. 再学 GDI+[22]: TGPLinearGradientBrush - 之一: TLinearGradientMode
  8. 24.redis持久化之AOF
  9. “乘风破浪”的芒果超媒,能上岸吗?
  10. 如何在免费的第三方服务器上运维微信公众号
  11. 自制瀑布流型爬虫(思路适用很多网站)
  12. GPS定位中的误差源
  13. python为什么叫胶水语言 举例_python为什么叫胶水语言 python为什么是系统脚本
  14. 苹果维修堪比登天难:评级F,获得最低分2.75分
  15. 【附源码】Java计算机毕业设计基于微信小程序停车系统(程序+LW+部署)
  16. DirectWrite文字排版——字符串去尾
  17. UltraScale时钟资源和时钟管理模块
  18. **潘老师 领导力\管理效能提升专家**
  19. 虽然是假的,但是我还是很高兴
  20. 典当行抵押需要什么资料

热门文章

  1. 普渡大学计算机图形,美国:普渡大学(UX方向)
  2. CSS 盒模型 基本术语解释
  3. Dapr for dotnet | 发布与订阅- Publish Subscribe
  4. 一个优化好的、成熟的代购网站需要哪些功能,操作流程又是怎么样的?
  5. 反向Telnet突破防火墙封锁
  6. AI之路最近的一些思考
  7. ccf 节日 java 思路
  8. MYSQL附近的人设计思路
  9. 手机会员积分 html,会员积分系统主要有什么作用和功能?
  10. 仿京东商城主页(静态代码)