前言

最近在工作中需要使用支付宝app支付,在初次使用过程中也不可避免的出现了一些问题,那么本次随笔主要是概述支付宝app支付服务端的整个实现过程以及就服务端出现的一些问题做一些总结。

1.准备工作

1.1 入驻蚂蚁金服开放平台

https://open.alipay.com/platform/home.htm

1.2 创建应用

首先需要创建一个应用。

然后需要设置应用公钥。

下载支付宝密钥生成器。生成成功之后将公钥复制到这里。

最后提交审核,等待。

2.maven依赖

首先需要下载sdk,https://docs.open.alipay.com/54/104509。

完成之后,需要切换命令行,进入sdk所在目录,执行如下命令。如果命令无法执行,请百度如何配置maven环境变量,配置好之后再执行。

mvn install:install-file -dgroupid=com.alipay.sdk -dartifactid=alipay-sdk-java -dversion=3.1.0 -dpackaging=jar -dfile=sdk文件名.jar

groupid:可以自己定义,pom文件依赖依据与此

artifactid:可以自己定义,pom文件依赖依据与此

version:可以自己定义,pom文件依赖依据与此

packaging:打包方式(jar)

file:文件的路径的路径

在pom.xml中引入依赖,如下。

com.alipay.sdk

alipay-sdk-java

3.1.0

3.配置文件中配置支付宝相关参数

#支付宝支付相关配置

#支付宝分配给开发者的应用id

alipayappid=xxx

#卖家支付宝用户号(对应异步通知返回参数seller_id)(可以不配置,只是异步通知时为了进一步校验而配置)

alipaysellerid=xxx

#卖家支付宝账号(对应异步通知返回参数seller_email)(可以不配置,只是异步通知时为了进一步校验而配置)

alipayaccount=xxx

#商户公钥

rsapublickey=xxx

#商户私钥(注意,如果是java语言,需要使用pkcs8格式的私钥,避免出现不可预知的错误)

rsaprivatkey=xxx

#支付宝公钥

rsaalipaypublickey=xxx

#加密方式

signtype=xxx

#仅支持json

alipayformat=json

#请求使用的编码格式,如utf-8,gbk,gb2312等

alipaycharset=utf-8

4.生成安卓端需要的orderstring信息的接口方法

/**

*app支付

*

*@author lp

*@date 2019/1/4 16:32

*/

@apioperation("app支付")

@requestmapping(value = "alipay", method = requestmethod.post)

public string alipay(@requestbody combinedpaymentdto dto, httpservletresponse response, httpservletrequest request) {

response.setheader("access-control-allow-origin", "*");

// 获取项目中实际的订单的信息

// 此处是相关业务代码

// 获取配置文件中支付宝相关信息

string alipaygateway = propertiesutils.getinstace("config/webservice.properties").getproperty("alipaygateway");

string alipayappid = propertiesutils.getinstace("config/webservice.properties").getproperty("alipayappid");

string rsapublickey = propertiesutils.getinstace("config/webservice.properties").getproperty("rsapublickey");

string rsaprivatkey = propertiesutils.getinstace("config/webservice.properties").getproperty("rsaprivatkey");

string rsaalipaypublickey = propertiesutils.getinstace("config/webservice.properties").getproperty("rsaalipaypublickey");

string signtype = propertiesutils.getinstace("config/webservice.properties").getproperty("signtype");

string alipayformat = propertiesutils.getinstace("config/webservice.properties").getproperty("alipayformat");

string alipaycharset = propertiesutils.getinstace("config/webservice.properties").getproperty("alipaycharset");

alipayclient alipayclient = new defaultalipayclient(alipaygateway, alipayappid, rsaprivatkey, alipayformat, alipaycharset, rsaalipaypublickey, signtype);

alipaytradeapppayrequest alipayrequest = new alipaytradeapppayrequest();

alipaytradeapppaymodel model = new alipaytradeapppaymodel();

model.setbody("xxx");

model.setsubject("xxx");

// 唯一订单号 根据项目中实际需要获取相应的

model.setouttradeno("");

// 支付超时时间(根据项目需要填写)

model.settimeoutexpress("30m");

// 支付金额(项目中实际订单的需要支付的金额,金额的获取与操作请放在服务端完成,相对安全)

model.settotalamount("");

model.setproductcode("quick_msecurity_pay");

alipayrequest.setbizmodel(model);

// 支付成功后支付宝异步通知的接收地址url

alipayrequest.setnotifyurl("xxx/getalipaynotifyinfo");

alipaytradeapppayresponse alipayresponse = null;

try {

alipayresponse = alipayclient.sdkexecute(alipayrequest);

} catch (alipayapiexception e) {

e.printstacktrace();

}

// 返回支付相关信息(此处可以直接将getbody中的内容直接返回,无需再做一些其他操作)

return alipayresponse.getbody();

}

5.支付成功后服务端接收支付宝发来的异步通知的接口方法

/**

*接收支付宝异步通知消息

*

*@author lp

*@date 2019/1/4 17:19

*/

@apioperation("接收支付宝异步通知消息")

@requestmapping(value = "getalipaynotifyinfo", method = requestmethod.post)

public string getalipaynotifyinfoofcombinedpayment(httpservletrequest request, httpservletresponse response) throws unsupportedencodingexception {

response.setheader("access-control-allow-origin", "*");

// 解决post请求中文乱码问题(推荐使用此种方式解决中文乱码,因为是支付宝发送异步通知使用的是post请求)

request.setcharacterencoding("utf-8");

//获取支付宝post过来反馈信息

map params = new hashmap<>();

map requestparams = request.getparametermap();

for (iterator iter = requestparams.keyset().iterator(); iter.hasnext();) {

string name = (string) iter.next();

string[] values = (string[]) requestparams.get(name);

string valuestr = "";

for (int i = 0; i < values.length; i++) {

valuestr = (i == values.length - 1) ? valuestr + values[i]

: valuestr + values[i] + ",";

}

// 官方demo中使用如下方式解决中文乱码,在此本人不推荐使用,可能会出现中文乱码解决无效的问题。

// valuestr = new string(valuestr.getbytes("iso-8859-1"), "utf-8");

params.put(name, valuestr);

}

// 支付宝公钥(请注意,不是商户公钥)

string rsaalipaypublickey = propertiesutils.getinstace("config/webservice.properties").getproperty("rsaalipaypublickey");

string signtype = propertiesutils.getinstace("config/webservice.properties").getproperty("signtype");

string alipaycharset = propertiesutils.getinstace("config/webservice.properties").getproperty("alipaycharset");

boolean signverified = false;

try {

//调用sdk验证签名

signverified = alipaysignature.rsacheckv1(params, rsaalipaypublickey, alipaycharset, signtype);

if(signverified) {

// 验证通知后执行自己项目需要的业务操作

// 一般需要判断支付状态是否为trade_success

// 更严谨一些还可以判断 1.appid 2.sellerid 3.out_trade_no 4.total_amount 等是否正确,正确之后再进行相关业务操作。

// 成功要返回success,不然支付宝会不断发送通知。

return "success";

}

// 验签失败 笔者在这里是输出log,可以根据需要做一些其他操作

// 失败要返回success,不然支付宝会不断发送通知。

return "fail";

} catch (alipayapiexception e) {

e.printstacktrace();

// 验签异常 笔者在这里是输出log,可以根据需要做一些其他操作

return "fail";

}

}

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

java 支付宝服务端,支付宝app支付服务端的实现-Java版相关推荐

  1. java支付宝和微信app支付(服务端处理)

    最近在接入支付宝和微信的app支付 , 之前因为大部分做的都是网页版的支付,没接触过app,这次把遇到的坑都记录下来. 首先 支付宝支付 https://openhome.alipay.com/pla ...

  2. PHP 实现支付宝APP 支付 (服务端 + 客户端 + 异步)

    目录 一.使用实例 二.服务端 1.下载SDK 2.业务层 3.业务层返回实例 推荐使用联调工具: 4.回调层 三.客户端 总结 一.使用实例 官方信息: 二.服务端 1.下载SDK App 支付服务 ...

  3. java app支付_Java 微信支付之APP支付服务端 (一)

    Java 微信支付之APP支付服务端 (一) 如图所示,这是服务端要集成的所有微信接口.至于在开放平台申请就不做赘述了.主要流程,1.下单,2.异步通知,3.查询. 一.微信统一下单请求交易 /** ...

  4. Java 微信支付之APP支付服务端 (一)

    Java 微信支付之APP支付服务端 (一) 如图所示,这是服务端要集成的所有微信接口.至于在开放平台申请就不做赘述了.主要流程,1.下单,2.异步通知,3.查询. 一.微信统一下单请求交易 /*** ...

  5. JAVA支付宝和微信(APP支付,提现,退款)

    公共参数图表: 接口 需要参数 通知方式 支付宝APP支付 应用公钥,应用私钥 异步 支付宝APP提现 应用公钥,应用私钥,支付宝公钥 同步 支付宝APP退款 应用公钥,应用私钥,支付宝公钥 同步 微 ...

  6. 微信app支付服务端开发记录

    微信APP支付服务端 调用接口需要注意事项: 1.签名:需要全部参数参加签名,空值去掉.(实际传递了什么参数需要,就根据实际参数进行签名) 2.签名参数:appid是申请支付功能的app对于的ID,k ...

  7. 支付宝手机网页唤醒app支付

    请直接看原文 下面链接是新版本的RSA2加密方式,这篇介绍的是老版本的手机网站唤醒app支付 新版支付宝手机网站唤醒app支付.支付宝pc支付.支付宝无密退款实现 http://blog.csdn.n ...

  8. php网页跳转支付宝app,php 做支付宝电脑网站和app支付

    首先支付宝的文档真是看得头晕眼花,摸不着北的感觉,网上百度PHP支付宝一堆都是花里胡哨的,看得一脸懵逼.所以自己整理了一下,其实也没那么复杂直接上代码: php 电脑支付的方法: /** * 支付宝支 ...

  9. php 支付宝电脑支付宝,PHP语言学习之php 做支付宝电脑网站和app支付

    本文主要向大家介绍了PHP语言学习之php 做支付宝电脑网站和app支付,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 首先支付宝的文档真是看得头晕眼花,摸不着北的感觉,网上百度PHP ...

最新文章

  1. HDU1862 EXCEL排序
  2. 互联网1分钟 |1225
  3. Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
  4. 计算机科学与技术专业的课程体系,基于业务的计算机科学与技术专业课程体系...
  5. EF获取多个数据集以及MySQL分页数据查询优化
  6. 基础总结篇之中的一个:Activity生命周期
  7. 诺基亚在日本测试5G网络 网速可达256MB/s
  8. ZeroMQ使用教程
  9. 计算机科学与技术真的会掉头发吗,大学里容易“掉头发”的3个专业,为了防秃头,大家慎重报考!...
  10. 【Python笔记】Pandas时区处理
  11. RAID介绍及RAID5配置实例(超详细)
  12. 写一篇简单的TileMap入门教程
  13. 羊毛出在狗身上让猪来买单 - 智能音箱背后的平台经济
  14. 深度学习入门之神经网络的学习思维导图
  15. 4.28dp专练总结
  16. 机器人NAO:为自闭症儿童散去阴霾
  17. Centos7.4下安装Nvidia驱动
  18. cs七龙珠怎么添加机器人_七龙珠CS怎么调机器人的难度,如题```!!
  19. adobe acrobat pro dc 无法打开PDF_PDF阅读软件收藏
  20. 山东自考c语言程序设计停考了吗,2019山东自考停考专业有哪些

热门文章

  1. 如何用一条sql解多元多次方程和构造序列
  2. cocos2d-x横版格斗游戏教程3
  3. linux端oracle设置缓冲区大小,oracleORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
  4. 4K投影仪哪款性价比最高,当贝X3 Pro高亮128G存储618值得看
  5. elfutils-0.178 configure 报错
  6. BUUCTF:梅花香自苦寒来
  7. HTML如何设置select下拉框的默认值?
  8. 两个亿储固态的测试、拆解,得一微YS9082HC主控
  9. 恶意代码分析实战Lab0701
  10. python文件用pyinstaller库进行打包时,代码中用到的图片和我们自定义的python package包的处理办法