支付宝使用spring mvc在服务器端生成订单和签名信息

boyanx3天前技术教程2

我们知道在使用支付宝的支付中,会需要我们生成这个订单,还要需要对订单排序签名,只有这两个信息生成客户端才可以进行调用SDK进行通信,进行调用支付宝。之前我介绍过如何生成支付宝在springMVC中如何生成签名,不过由于在客户端生成订单,没有把订单信息进行保存,在异步回调的时候无法查询订单信息,存在弊端,为了解决这个问题,我把生成订单和生成签名信息放到服务器里面,如果对我的文章有兴趣,欢迎订阅我的头条号,一点热,yeehot.com

此外要注意一点,就是移动支付是需要企业申请的才可以使用的,如果是个人应该申请不通过。

关于移动支付的SDK大家可以在官网下载。

https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.M7O36T&treeId=54&articleId=104509&docType=1

服务器搭建部分

1、创建一个spring MVC项目:

这里我就暂时不做介绍了,我在之前的文章已经说得比较详细了。

IntelliJ IDEA搭建springmvc项目图文介绍

springmvc实现支付宝移动支付的签名与异步回调

2、完成上面的操作后,我们可以做一下生成订单的操作。

// 合作身份者id,以2088开头的16位纯数字

publicstaticfinal String DEFAULT_PARTNER = "你的合作身份ID";

String orderInfo;

publicstaticfinal String DEFAULT_SELLER = "你的收款账号";

private String getOrderInfo(String subject, String body, String price,

String orderinfo) {

// 签约合作者身份ID

String orderInfo = "partner=" + "\"" + DEFAULT_PARTNER + "\"";

// 签约卖家支付宝账号

orderInfo += "&seller_id=" + "\"" + DEFAULT_SELLER + "\"";

// 商户网站唯一订单号

orderInfo += "&out_trade_no=" + "\"" + orderinfo + "\"";

// 商品名称

orderInfo += "&subject=" + "\"" + subject + "\"";

// 商品详情

orderInfo += "&body=" + "\"" + body + "\"";

// 商品金额

orderInfo += "&total_fee=" + "\"" + price + "\"";

// 商品金额

// orderInfo += "&memberinfo=" + "\"" + "kaopuvip_0001" + "\"";

// 商品金额

// orderInfo += "&uid=" + "\"" + myuser.getUid() + "\"";

// 服务器异步通知页面路径

// orderInfo += "&notify_url=" + "\"" +

// "http://notify.msp.hk/notify.htm" + "\"";

String nurl = "";

try {

nurl = URLEncoder.encode(

"http://www.yeehot.com/ming/pay/zfbnotify",

"UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

orderInfo += "&notify_url=" + "\"" + nurl + "\"";

// 服务接口名称, 固定值

orderInfo += "&service=\"mobile.securitypay.pay\"";

// 支付类型, 固定值

orderInfo += "&payment_type=\"1\"";

// 参数编码, 固定值

orderInfo += "&_input_charset=\"utf-8\"";

// 设置未付款交易的超时时间

// 默认30分钟,一旦超时,该笔交易就会自动被关闭。

// 取值范围:1m~15d。

// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。

// 该参数数值不接受小数点,如1.5h,可转换为90m。

orderInfo += "&it_b_pay=\"30m\"";

// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付

// orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空

orderInfo += "&return_url=\"m.alipay.com\"";

// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)

// orderInfo += "&paymethod=\"expressGateway\"";

return orderInfo;

}

private String getOutTradeNo() {

SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss");

Date date = new Date();

String key = format.format(date);

java.util.Random r = new java.util.Random();

key += r.nextInt();

// key = key.substring(0, 15);

key = key.substring(0, 15);

key = key + "";

key = key;

// Log.d(TAG, "outTradeNo: " + key);

return key;

}

3、设计spring mvc访问页面,我们提供了四个参数,用户名,商品名称,商品详情,商品价格的参数传递,由于商品名称和商品价格可能存在中文,所以我们需要把字符转码和解码。同时我们还需要把订单信息保存到数据库,用来在异步回调的时候做一个验证。最后,我们通过json的格式返回我们的sign和订单数据。

@ResponseBody

@RequestMapping(value = "/pay/zhifubao/payinfo", produces = "application/json; charset=utf-8")

public String zhifusign(String username, String subject, String body, String price) {

if (subject != null) {

try {

subject = URLDecoder.decode(subject, "utf-8");

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (body != null) {

try {

body = URLDecoder.decode(body, "utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

String tradeno = getOutTradeNo();

String order = getOrderInfo(subject, body, price, tradeno);

String ordersign = RSA.sign(order, AlipayConfig.private_key,

AlipayConfig.input_charset);

{

ZFBINFO tradeInfo = new ZFBINFO();

tradeInfo.setAddtime(new Timestamp(System.currentTimeMillis()));

tradeInfo.setUsername(username);

tradeInfo.setBody(body);

tradeInfo.setFee(price);

tradeInfo.setSubject(subject);

tradeInfo.setIsfinish(1);

tradeInfo.setTradeNo(tradeno);

tradeInfoManager.addKpTradeInfo(tradeInfo);

}

JSONObject jsonObject = new JSONObject();

jsonObject.put("sign", ordersign);

jsonObject.put("order", order);

return jsonObject.toString();

}

关于异步回调这里,我就不做解释,今天的课程就讲到这里,如果有什么疑惑,欢迎留言咨询,我看到评论的时候就会为大家解答。

欢迎继续关注我的头条号:一点热,www.yeehot.com

欢迎大家收藏与转发,如果转载到其它网站,请与我联系.

标签: todomvc

相关文章

SpringMVC学习--参数绑定(springmvc参数绑定支持的类型有哪些)

从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controll...

Springboot企业级项目开发之项目测试——性能测试!

项目开发中,完成了功能测试后一般还需要做性能测试,其原因有以下两点:目前绝大多数的应用都是Web应用,它们一般是基于网络的分布式应用,无法准确地评估其用户数量,而且用户使用场景也不确定,因此需要对项目...

太牛了!腾讯T9耗时69天整理出最全架构师进阶核心知识点笔记

俗话说的好:每一个程序员应该都想着如何快速提升自己(反正我是这样想的),从程序员进阶到架构师再到技术专家再到CTO 。当然这其中需要大量的知识储备,是一个不断学习的过程,话不多说下面我直接上图。Jav...

全网最全Spring面试题之高级篇整理总结(共25题,附超详细解答)

1、什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发...

SpringMVC访问静态资源(springboot访问webapp下静态资源)

有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等)。其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径<...

springmvc实现支付宝移动支付的签名与异步回调

现在越来越多的应用需要接入支付的功能,我们通过手机客户端输入银行账号和验证码就可以轻松的实现支付,对于我们的生活非常方便,今天我们来说一下如何在我们的springmvc项目+Android客户端实现手...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。