支付的那些套路(手机支付宝篇)

本文详细介绍了使用支付宝进行安卓应用内支付的具体步骤。包括参数设置、签名生成、回调验证等关键环节,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转发自:支付的那些套路(手机支付宝篇)

 

安卓和IOS的支付方式是不同的,安卓走接口,IOS走内购,官方文档写的还算可以,安卓的基本套路是这样的:

113711_1xZw_2421441.png

so:根据阿里提供的文档拼接参数

  Map<String, String> paramMap = new HashMap<String, String>();
            paramMap.put("app_id", PayPropertiesUtils.getString("alipay.appPay.appId"));
            paramMap.put("method", PayPropertiesUtils.getString("alipay.appPay.method"));
            paramMap.put("format", PayPropertiesUtils.getString("alipay.appPay.format"));
            paramMap.put("charset", PayPropertiesUtils.getString("alipay.inputCharset"));
            //发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"	2014-07-24 03:07:50
            paramMap.put("timestamp", UtilDate.getDateFormatter());
            paramMap.put("version", PayPropertiesUtils.getString("alipay.appPay.version"));
            paramMap.put("notify_url", PayPropertiesUtils.getString("alipay.appPay.notifyUrl"));
            //业务对象
            Map<String, String> bizContentMap = new HashMap<String, String>();
            bizContentMap.put("body", GlobalConstants.PAY_PRODUCT_NAME);
            bizContentMap.put("subject", GlobalConstants.PAY_PRODUCT_NAME);
            bizContentMap.put("out_trade_no", payExtendVo.getOrderId());
            bizContentMap.put("timeout_express",PayPropertiesUtils
            .getString("alipay.appPay.timeoutExpress"));
            bizContentMap.put("total_amount", String.valueOf(payExtendVo.getPayAmount()));
            bizContentMap.put("product_code", PayPropertiesUtils
            .getString("alipay.appPay.productCode"));
            String biz_content = JSON.toJSONString(bizContentMap);
            paramMap.put("biz_content", biz_content);
            String sign_type =  PayPropertiesUtils.getString("alipay.appPay.signType");
            paramMap.put("sign_type",sign_type);
            //去除空值
            Map<String,String> signMap = AlipayCore.paraAppFilter(paramMap);
            //生成签名
            String sign = Signature.buildRequestMysign(signMap,sign_type,RSA_PRIVATE_KEY);
            sign = URLEncoder.encode(sign,"utf-8");
            signMap.put("sign", sign);
            //获取业务参数串
            String reqOrderStr = AlipayCore.createLinkString(signMap);

然后篇拼接返回给App的参数:

            Map returnMap = new HashMap();
            returnMap.put("reqPayUrl", reqOrderStr);
            returnMap.put("orderId",payExtendVo.getOrderId());
            returnMap.put("payAmount",tradeLog.getPayAmount());
            returnMap.put("income",tradeLog.getIncome());
            returnMap.put("rewardFanpiao",tradeLog.getRewardFanpiao());
            returnMap.put("incomeAmount",tradeLog.getIncomeAmount());
            resultBean.setData(returnMap);

最后存库,支付状态是待支付。

手机端通过SDK调用之后根据订单ID请求服务器支付状态。

接下来是阿里给服务器的回调,如果代码理由AOP或者拦截提前排除掉这个请求:

首先解析参数 :

            Map<String, String> checkParamsMap = new HashMap<String,String>();
            Map requestParams = thridPartyNotifyVo.getAliPayRequestParamsMap();
            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] + ",";
                }
                //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
                //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
                checkParamsMap.put(name, valueStr);
            }

然后验证参数是否和合法,是不是从阿里发出来的,可以调用阿里给的demo里的方法:

AlipayNotify.verify(checkParamsMap,PayPropertiesUtils.getString("alipay.appPay.signType"),PayPropertiesUtils.getString("alipay.appPay.alipayPublicKey"))

如果是true:更数据库的状态:最后给支付宝一个success,告诉支付宝回调已成功。

转载于:https://my.oschina.net/anxiaole/blog/852270

Node.js是一种JavaScript运行环境,主要用于服务器端开发。以下是安装和配置的基本步骤: **安装Node.js**: 1. 访问官方网站 https://nodejs.org/ ,选择适合您操作系统的版本下载安装包。 2. 运行下载的安装程序,按照提示完成安装。记得勾选"添加到PATH"选项,这样可以在命令行直接访问Node.js。 **检查安装**: 安装完成后,在终端或命令提示符中输入 `node -v` 或 `npm -v`,如果能显示版本信息,则表示已经成功安装。 **全局配置npm**: Node.js自带了包管理工具npm(Node Package Manager)。为了方便全局安装模块,需要配置npm。运行 `npm config set prefix [路径]` 设置全局模块的安装位置,如 `npm config set prefix "C:\Users\[用户名]\AppData\Roaming\npm"`(Windows系统)。 **创建项目和初始化**: 使用`npm init` 创建一个新的项目并生成package.json文件,该文件用于存储项目的配置信息。 **安装依赖**: 在项目目录下,可以使用 `npm install <module-name>` 安装需要使用的库,或者将它们添加到package.json的dependencies或devDependencies字段内。 **启动服务**: 对于Web应用,你可以使用Express等框架创建服务器。例如,创建一个简单的HTTP服务器: ```javascript const http = require('http'); const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, Node.js!'); }); const port = process.env.PORT || 3000; http.createServer(app).listen(port, () => { console.log(`Server running on port ${port}`); }); ``` 然后,通过 `node server.js` 启动你的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值