支付宝支付流程

tech2023-01-19  106

支付宝支付流程

准备工作

下载支付宝开放平台开发助手 支付宝开放平台 申请自己的沙箱环境花生壳 4.客户端调试工具 手机安装 适用场景 在App内集成支付宝支付。APP调用支付宝提供的SDK,SDK再调用支付宝APP内的支付模块。如果用户已安装支付宝APP,商家APP会跳转到支付宝中完成支付,支付完后跳回到商家APP内。如果用户没有安装支付宝APP,商家APP内会调起支付宝网页支付收银台,用户登录支付宝账户,支付完后展示支付结果。

接入

创建应用并获取APPID APPID和支付宝网关都是其自动生成提供的,不需要配置,沙箱只需要在在这里配置密钥。记得用私钥签名公钥验证下其正确性。

1.只能填写和修改应用公钥,支付宝公钥会自动对应生成,两个公钥是不一样的(仅仅头尾像而已) 2.配置AlipayConfig.java的公钥属性使用的是支付宝公钥 3.这个支付宝网关都是沙箱测试环境的,真实线上环境的网关没有 dev,线上的APPID 是另外的。在创建应用时才有 快速接入文档 链接: link.

密钥配置

1. 支付宝密钥处理体系 所以需要获取到应用公钥、应用私钥以及支付宝公钥:

①应用公钥 由商户自己生成的RSA公钥(与应用私钥必须匹配),商户需上传应用公钥到支付宝开放平台,以便支付宝使用该公钥验证该交易是否是商户发起的。

②应用私钥 由商户自己生成的RSA私钥(与应用公钥必须匹配),商户开发者使用应用私钥对请求字符串进行加签。

③支付宝公钥 支付宝的RSA公钥,商户使用该公钥验证该结果是否是支付宝返回的。 打开支付宝开放平台开发助手 更改复制的公钥

Demo案例解析

package com.example.demo.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradeAppPayModel; import com.alipay.api.request.AlipayTradeAppPayRequest; import com.alipay.api.response.AlipayTradeAppPayResponse; /** * 作者: MrHongGA * 时间: 2020/8/28 17:44 * 描述: */ public class AliPayController { /** * APP_ID 应用id */ private final static String APP_ID="2021000119661427"; /** *应用私钥 */ private final static String APP_PRIVATE_KEY="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"; /** * 编码 */ private final static String CHARSET="UTF-8"; /** * 支付宝公钥 */ private final static String ALIPAY_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsRHT6u+jdzu/Z3Ccf39LUgQVj0vF40lGISRNSmCYqE/IpDhNAzZcfftBmJ0t3Gmj5Hi+QYNfQm0DgKwiV5xHEFGVU59JzHqJCsV5IDcCeB8WkIzpzkBmrK3EAw14q/Oibmm6f8PGZvfwgZge7owZx+SqlfnyMsEcfWmUQIgFvvkBEY7XozXEHMILAA6Mk3B1hs+hY+Y9hJF8LML7Hi0VUT4I1CbyMlh7oKpY1P+ySvifyf1MvZ6VO8zCyLpa6nbJyIWfFsC8jw3ZQExdme67VAVnvvJmogPnGVA5+HbUBRR0hkSp8wmuEusNYa2VFnx/DpWLbozgNQiJai9Dgxt0TwIDAQAB+5UZhLLv9lUfWBFhF2xfC23INvVowY3xFXpUu16ytCeDDarxWU8zyGQYCJuNBhW6rP4ZQk7vndCyFg3V+6G3W0TgBOHH9w50eP571Hfc9mACTQVjK7+4HlZ2ISPgUrrVOcH5D7WoiOai9o59jdKx+pb9W6ydzZK1VbZ5GxEHHDMJufJKszcIUR1kayvuHVMB/1u15tQFeDAa0RrPMAuNx5U1N9k5sDI0sdGC5GDsX+elnhtng3j8wneEKLzmtZVW+Kq+JlqQIDAQAB"; /** * 沙箱公关 */ private final static String GATEWAY_URL ="https://openapi.alipaydev.com/gateway.do"; /** * 格式化 */ private final static String FORMAT ="json"; /** * 签名类型 */ private final static String SIGN_TYPE ="RSA2"; /** * 获取订单信息 */ public void getOrderInfo(){ //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.setBody("我是测试数据"); model.setSubject("App支付测试Java"); model.setOutTradeNo("老洪真帅"); model.setTimeoutExpress("30m"); model.setTotalAmount("520"); model.setProductCode("QUICK_MSECURITY_PAY"); request.setBizModel(model); request.setNotifyUrl("商户外网可以访问的异步地址"); try { //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。 } catch (AlipayApiException e) { e.printStackTrace(); } } public static void main (String[] args){ AliPayController aliPayController=new AliPayController(); aliPayController.getOrderInfo(); } }

这里都是一些配置参数,类似于properties文件的作用。 1)partner在自己的蚂蚁金服个人中心就可以看到,2088开头。 2)支付宝号就不用说了。 3)支付宝公钥也是支付包提供的,复制过来,这里客户蚂蚁金服账号已经收回去了,没法给大家一个一个找,自己细心点,个人中心的这些参数都有。 4)商户私钥就是我们之前生成贴过去的商户密钥。 5)扫码付款页面return_url ,我这里是测试,设置 return_url=”locahost:端口号create_direct_pay_by_user-JAVA-UTF-8/rerturn_url.jsp” 6)notify可以自己随便设置一个,用于付款结束后跳转到商户页面。 6)其他参数暂时不管。 所有静态变量都设置好,确保正确,没有空格,如果下面测试出问题,就从这几个参数里找,是不是哪里有空格,或者密钥贴错了的原因。先不要去把参数弄成配置文件形式再读出来,有些框架会报错。建议测试跑通再尝试配置化。 重启项目继续测试,再次点击确认支付。

最新回复(0)