最新文�? 叠加定理_戴维南定理_诺顿定理 CMOS反相器1_-_电路结构和工作原理 MOSFET和BJT作为开关的区别 车规IC寿命加速试验为什么要做1000h 漫反射积分球原理
原创 : java-springboot支付宝小程序支付、授权、获取用户信息、回调以及原路退款 历史版本:
上次修改时间:
;\n <;dependency>;\n <;groupId>;com.alipay.sdk<;/groupId>;\n <;artifactId>;alipay-sdk-java<;/artifactId>;\n <;version>;4.5.0.ALL<;/version>;\n <;/dependency>;\n\n```\n\n### 1.授权 前端使用 my.getAuthCode方法。\n\n```\n参考官方文档https://opendocs.alipay.com/mini/introduce/authcode\n\n```\n\n### 2.根据第一步的授权拿到auth_code来获取唯一标识userid。\n\n```\n /**\n * 授权码\n * @param auth_code\n * @return\n * @throws AlipayApiException\n */\n @RequestMapping(\"getInfo\")\n public AjaxJson getInfo(String auth_code) throws AlipayApiException {\n //使用支付宝小程序的固定方法获取auth_code\n if(auth_code==null||auth_code.length()==0) {\n return AjaxJson.getError(\"请求参数auth_code不能为空\");\n }else {\n //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType\n //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式\n AlipayClient alipayClient = new DefaultAlipayClient(\"https://openapi.alipay.com/gateway.do\",AliPayConfig.APP_ID,AliPayConfig.MERCHANT_PRIVATE_KEY,\"json\",\"GBK\",AliPayConfig.ALIPAY_PUBLIC_KEY,\"RSA2\");\n AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();\n // 值为authorization_code时,代表用code换取\n request.setGrantType(\"authorization_code\");\n //授权码,用户对应用授权后得到的\n request.setCode(auth_code);\n //这里使用execute方法\n AlipaySystemOauthTokenResponse response = alipayClient.execute(request);\n //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段\n request.setRefreshToken(response.getAccessToken());\n //返回成功时 就将唯一标识返回\n if(response.isSuccess()){\n System.out.println(\"调用成功\");\n //我这里只返回了一个字段给前端用\n Map<;String,Object>; map=new HashMap<;>;();\n map.put(\"userid\", response.getUserId());\n return AjaxJson.getSuccessData(map);\n } else {\n return AjaxJson.getError(\"调用失败\");\n }\n }\n }\n\n```\n\n### 3.获取用户信息 前端使用API中的方法 my.getOpenUserInfo 。获取到之后传给后端并调用接口保存或者更新用户信息。\n\n```\n注意:获取会员基础信息需要在开放平台小程序 管理页面 申请添加 获取会员基础信息 功能包。\n\n```\n\n```\n /***\n * 根据userid查询数据库是否有这个人,有就更新时间 没有就添加到数据库\n * @param userid\n * @param avatar\n * @param countryCode\n * @param province\n * @param city\n * @param nickName\n * @param gender\n * @return\n */\n @RequestMapping(\"queryInfo\")\n public AjaxJson queryInfo(String userid, String avatar, String countryCode, String province, String city,\n String nickName, String gender) {\n Alipayuserinfo info = alipayuserinfoMapper.getInfoByUid(userid);\n if (info != null) {\n info.setUpdatetime(new Date());\n alipayuserinfoMapper.update(info);\n } else {\n Alipayuserinfo userinfo = new Alipayuserinfo();\n userinfo.setNick_name(nickName);\n userinfo.setAvatar(avatar);\n userinfo.setUserid(userid);\n userinfo.setCountryCode(countryCode);\n userinfo.setProvince(province);\n userinfo.setCity(city);\n userinfo.setGender(gender);\n alipayuserinfoMapper.add(userinfo);\n return AjaxJson.getSuccessData(userinfo);\n }\n return AjaxJson.getSuccessData(info);\n }\n\n```\n\n**这里肯定会有朋友不解授权和获取用户信息可以写在一个方法里而我写了两个方法,对的。我一开始是放在一起写的,但是测试的时候一直报出Isv权限不足,能解决的办法都试过了,继续报错。所以我是分开写了方法。**\n\n### [https://opendocs.alipay.com/mini/introduce/pay](https://opendocs.alipay.com/mini/introduce/pay)\n\n## 注意这里是官方文档中的代码\n\n![](https://www.testingcloud.club/sapi/api/image_download/bbeeb1b3-7b40-11ef-b381-00163e13fc6a.png)\n\n## 以下是我本人的代码\n\n```\n /**\n * 用户唯一标识id\n * @param userid\n * @return\n */\n @RequestMapping(\"/pay1\")\n public static AlipayTradeCreateResponse pay(String userid){\n //获得初始化的AlipayClient\n AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.GATEWAY_URL, AliPayConfig.APP_ID, AliPayConfig.MERCHANT_PRIVATE_KEY, \"json\", AliPayConfig.CHARSET, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.SIGN_TYPE); \n //设置请求参数\n AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();\n \n JSONObject json=new JSONObject();\n //雪花算法订单号\n IdWorker idworker=new IdWorker();\n Long oid=idworker.nextId();\n String out_trade_no =String.valueOf(oid);\n //订单号\n json.put(\"out_trade_no\",out_trade_no);\n //金额 这里的金额是以元为单位的可以不转换但必须是字符串\n json.put(\"total_amount\",\"0.01\");\n //描述\n json.put(\"subject\",\"测试\");\n //用户唯一标识id 这里必须使用buyer_id 参考文档\n json.put(\"buyer_id\",userid);\n //对象转化为json字符串\n String jsonStr=json.toString();\n //商户通过该接口进行交易的创建下单\n request.setBizContent(jsonStr);\n //回调地址 是能够访问到的域名加上方法名\n request.setNotifyUrl(\"http://vvvvvvv.cn/aliPay/notifyUrl\");\n try {\n //使用的是execute\n AlipayTradeCreateResponse response = alipayClient.execute(request);\n return response;\n } catch (AlipayApiException e) {\n e.printStackTrace();\n }\n return null;\n }\n\n```\n\n**我在这里有一些代码没有使用官方文档的方式写参数,是因为我一开始写的时候去测试时一直返回参数无效,而我找了好久也不知道是什么原因,这就很尴尬了,所以我换了一种方式。大家写到这个地方的话可以参考。**\n\n### 前端调用my.tradePay方法\n\n![](https://www.testingcloud.club/sapi/api/image_download/bc5d5e4c-7b40-11ef-b381-00163e13fc6a.png)
**注意这里的trandeNo参数不用改,这是固定的,订单号需要你自己去支付那里获取。切记:获取到的值是trade_no,并不是outTradeNo。**\n\n这是本人调试时的图,接下来离成功就不远了。
![](https://www.testingcloud.club/sapi/api/image_download/bcccf84b-7b40-11ef-b381-00163e13fc6a.png)\n\n### 5.回调方法\n\n```\n\n /**\n * 支付宝服务器异步通知url\n * @throws Exception \n */\n @RequestMapping(value=\"/notifyUrl\")\n public void notifyUrl(HttpServletRequest request,HttpServletResponse response) throws Exception{\n //获取支付宝发送过来的信息\n Map<;String,String>; params = new HashMap<;String,String>;();\n Map<;String,String[]>; requestParams = request.getParameterMap();\n //循环获取到所有的值\n for(String str:requestParams.keySet()) {\n String name =str;\n String[] values = (String[]) requestParams.get(name);\n String valueStr = \"\";\n for (int i = 0; i <; values.length; i++) {\n valueStr = (i == values.length - 1) ? valueStr + values[i]\n : valueStr + values[i] + \",\";\n }\n //乱码解决,这段代码在出现乱码时使用\n //valueStr = new String(valueStr.getBytes(\"ISO-8859-1\"), \"utf-8\");\n params.put(name, valueStr);\n }\n //调用SDK验证签名\n boolean signVerified = AlipaySignature.rsaCheckV1(params, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE); \n //boolean类型signVerified为true时 则验证成功 \n if(signVerified) {\n //获取到支付的状态 TRADE_SUCCESS则支付成功\n String trade_status =request.getParameter(\"trade_status\"); \n if (trade_status.equals(\"TRADE_SUCCESS\")){\n System.out.println(\"支付成功\");\n }else {\n System.out.println(\"支付失败\");\n }\n }\n //签名验证失败 \n else {\n System.out.println(AlipaySignature.getSignCheckContentV1(params));\n }\n }\n}\n\n```\n\n### [https://opendocs.alipay.com/apis/api_1/alipay.trade.refund/](https://opendocs.alipay.com/apis/api_1/alipay.trade.refund/)\n\n## 官方的示例代码\n\n![](https://www.testingcloud.club/sapi/api/image_download/bd3620e6-7b40-11ef-b381-00163e13fc6a.png)\n\n###### 这里的AlipayTradeRefundRequest 我没找到所以用的是另外一个类AlipayTradeRefundModel,可能是包的原因导致这个包一直没找到。大家写的时候要注意哈!\n\n## 以下是本人的代码\n\n```\n /**\n * 订单号\n * @param outTradeNo\n */\n @RequestMapping(\"alipayRefound\")\n public void alipayRefound(String outTradeNo) {\n //初始化\n AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.GATEWAY_URL, AliPayConfig.APP_ID, AliPayConfig.MERCHANT_PRIVATE_KEY, \"json\", AliPayConfig.CHARSET, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.SIGN_TYPE); \n //构造退款的参数\n AlipayTradeRefundModel model=new AlipayTradeRefundModel();\n //订单号 这里的订单号是自己用算法生成的 和支付宝系统的订单号TradeNo只能二选一\n model.setOutTradeNo(outTradeNo);\n //系统订单号\n //model.setTradeNo(tradeNo);\n //金额\n model.setRefundAmount(\"0.01\");\n //退款原因\n model.setRefundReason(\"测试退款\");\n //退款请求\n AlipayTradeRefundRequest request=new AlipayTradeRefundRequest();\n //参数set到请求里\n request.setBizModel(model);\n try {\n //退款返回\n AlipayTradeRefundResponse response=alipayClient.execute(request);\n System.out.println(response.getBody()+\"\\n\");//获取到body这个订单的所有信息\n System.out.println(response.getMsg()); //这里打印的是退款的信息 是否退款成功的原因\n } catch (AlipayApiException e) {\n // TODO 自动生成的 catch 块\n e.printStackTrace();\n System.out.println(\"支付宝退款错误\");\n }\n }\n \n\n```\n\n本人测试时的图片
![](https://www.testingcloud.club/sapi/api/image_download/bd9f7546-7b40-11ef-b381-00163e13fc6a.png)
到这儿就OK啦!!!![](https://www.testingcloud.club/sapi/api/image_download/be5a9a5a-7b40-11ef-b381-00163e13fc6a.png)\n\n#### 实不相瞒有很少的人做支付宝小程序,以上是我的经验分享给大家,希望能够帮助到正在做支付宝小程序这一块的朋友。如有不解,请在下方留言。\n -->
0条评�?
全部评论

关于博主

an actually real engineer

通信工程专业毕业,7年开发经验

技术栈:

精通c/c++

精通golang

熟悉常见的脚本,js,lua,python,php

熟悉电路基础,嵌入式,单片机

耕耘领域:

服务端开发

嵌入式开发

git

>

gin接口代码CURD生成工具

sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。

输入ddl:
输出代码:

qt .ui文件转css文件

duilib xml 自动生成绑定控件代码

协议调试器

基于lua虚拟机的的协议调试器软件 支持的协议有:

串口

tcp客户端/服务端

udp 组播/udp节点

tcp websocket 客户端/服务端

软件界面

使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上

下载地址和源码

duilib版本源码 qt qml版本源码 二进制包

webrtc easy demo

webrtc c++ native 库 demo 实现功能:

基于QT

webrtc摄像头/桌面捕获功能

opengl渲染/多播放窗格管理

janus meeting room

下载地址和源码

源码 二进制包

wifi,蓝牙 - 无线开关

实现功能:

通过wifi/蓝牙实现远程开关电器或者其他电子设备

电路原理图:

实物图:

深度学习验证工具

vtk+pcl 点云编辑工具

实现功能:

1. 点云文件加载显示(.pcd obj stl)

2. 点云重建

3. 点云三角化

4. 点云缩放

下载地址:

源码 二进制包

虚拟示波器

硬件实物图:

实现原理

基本性能

采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS

上位机实现功能: 采集,显示波形,存储wave文件。

参数可运行时配置

上位机:

显示缓冲区大小可调

刷新率可调节

触发显示刷新可调节

进程守护工具

基本功能:

1. 守护进程,被守护程序崩溃后自动重启。

2. 进程输出获取,显示在编辑框中。

二进制包

openblt 烧录工具

基本功能:

1. 加载openblt 文件,下载到具有openblt bootloader 运行的单片机中。

二进制包

opencv 功能验证工具(开源项目二次开发)

基本功能:

1. 插件化图像处理流程,支持自定义图像处理流程。 2. 完善的日志和权限管理

二进制包

又一个modbus调试工具

最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:

1. 基于QT5

2. 基于libmodbus

3. 三方库完全跨平台,linux/windows。

二进制包

屏幕录制工具

1. 基于QT5

2. 基于ffmpeg

3. 支持自定义录屏

源代码

开源plutosdr 板卡

1. 完全开源

2. 提高固件定制服务

3. 硬件售价450 手焊产量有线

测试数据

内部DDS回环测试

接收测试

外部发送500MHZ FM波形

硬件原理图

matlab测试

2TRX版本

大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。 对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。

二次开发例子

``` all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream

bsdiff算法补丁生成器

1. 官方bsdiff算法例子自带bzip压缩方式

2. 本例子没有压缩,直接生成补丁文件

3. 图形化界面基于DUILIB

二进制文件

版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型

Base64 Image

. 闽ICP备19002644号