【对接支付宝支付详细流程】

下面示例使用的是支付宝的网页支付,最终的效果如图:

1.前置条件

对接支付宝你需要了解的知识点

1.加密算法

对称加密和非对称加密,RSA2加密算法,签名验证

2.支付宝平台openid unionId的概念

https://opendocs.alipay.com/pre-open/06z4jd?sourceCode=SC00004290&projectCode=1964001821&sceneVersion=2

3.内网开发内网穿透(本地调试)

下载地址https://natapp.cn/

使用教程:https://natapp.cn/article/natapp_newbie

异常情况;

这种情况属于已经同了,但是本地端口号对应的服务没启动或者在natapp服务端配置的端口号和本地的对应不上

4.支付的整体流程

支付宝开放平台登记信息-》填写

应用公钥信息 用于给支付宝 支付宝拿着去做验证

获取支付宝公钥信息,用于对支付的回调接口做签名签证

获取支付宝网关信息 用于发起支付调用支付宝进行支付

5.沙箱环境的使用

https://opendocs.alipay.com/common/02kkv7

6.SDK的下载

https://opendocs.alipay.com/open/02np94?pathHash=647fc236

引入依赖即可

<dependency> 
  <groupId>com.alipay.sdk</groupId> 
  <artifactId>alipay-sdk-java</artifactId> 
  <version>4.34.0.ALL</version>
 </dependency>

7.示例代码的下载

1.

2.

3.

8.api文档

https://opendocs.alipay.com/open/29ae8cb6_alipay.trade.wap.pay?scene=21&pathHash=1ef587fd

9.常见的异常错误码

https://opensupport.alipay.com/support/FAQ/d6f3097d-14a9-4edc-a488-4e5a1d6aaf8a

2.细节流程

1.创建自己的产品

在控制台选择你需要开发的产品

这里选择网页移动应用,点击创建网页/移动应用

配置完之后进入应用详情

2.配置基础信息

1.配选择接口加签名方式,

证书或者签名这里选择签名。

按照操作配置签名

2.配置公钥和私钥

如何生成公钥和私钥?

https://opendocs.alipay.com/support/01rauw

3.配置回调地址

附支付接口代码

demo

package com.css.tom.service;

/**
 * @author weiwensi
 * @version 1.0-SNAPSHOT
 * @since 2024/7/6 21:23
 */

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.domain.ExtUserInfo;
import com.alipay.api.domain.InvoiceKeyInfo;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.alipay.api.domain.InvoiceInfo;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.domain.GoodsDetail;
import com.alipay.api.domain.SubMerchant;

import com.alipay.api.FileItem;
import org.springframework.stereotype.Service;

import java.util.Base64;
import java.util.ArrayList;
import java.util.List;
@Service
public class AlipayTradePagePay {

    public  String pay() throws AlipayApiException {
        // 初始化SDK
        AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());

        // 构造请求参数以调用接口
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();

        // 设置商户门店编号
        model.setStoreId("NJ_001");

        // 设置订单绝对超时时间
        model.setTimeExpire("2024-07-07 19:05:01");

        // 设置业务扩展参数
        ExtendParams extendParams = new ExtendParams();
        //个人中心 mapi网关产品密钥  沙箱环境-》沙箱账号 2088721033555793
      /*  extendParams.setSysServiceProviderId("2088612340891761");
        extendParams.setHbFqSellerPercent("100");
        extendParams.setHbFqNum("3");
        extendParams.setIndustryRefluxInfo("{\"scene_code\":\"metro_tradeorder\",\"channel\":\"xxxx\",\"scene_data\":{\"asset_name\":\"ALIPAY\"}}");
        extendParams.setSpecifiedSellerName("tom的跨境小铺");
        extendParams.setRoyaltyFreeze("true");
        extendParams.setCardType("S0JP0000");
        model.setExtendParams(extendParams);*/

        // 设置订单标题
        model.setSubject("Iphone6 16G");

        // 设置请求来源地址
        //model.setRequestFromUrl("https://");

        // 设置产品码
        model.setProductCode("FAST_INSTANT_TRADE_PAY");

        // 设置PC扫码支付的方式
        model.setQrPayMode("1");

        // 设置商户自定义二维码宽度
        model.setQrcodeWidth(100L);

        // 设置请求后页面的集成方式
        model.setIntegrationType("PCWEB");

        // 设置订单包含的商品列表信息
        List<GoodsDetail> goodsDetail = new ArrayList<GoodsDetail>();
        GoodsDetail goodsDetail0 = new GoodsDetail();
        goodsDetail0.setGoodsName("ipad");
        goodsDetail0.setAlipayGoodsId("20010001");
        goodsDetail0.setQuantity(1L);
        goodsDetail0.setPrice("2000");
        goodsDetail0.setGoodsId("apple-01");
        goodsDetail0.setGoodsCategory("34543238");
        goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
        goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
        goodsDetail.add(goodsDetail0);
        model.setGoodsDetail(goodsDetail);

        // 设置商户的原始订单号
        model.setMerchantOrderNo("20161008001");

        // 设置二级商户信息
        SubMerchant subMerchant = new SubMerchant();
        /*
        subMerchant.setMerchantId("2088000603999128");
        subMerchant.setMerchantType("alipay");
        model.setSubMerchant(subMerchant);*/

        // 设置开票信息
       /* InvoiceInfo invoiceInfo = new InvoiceInfo();
        InvoiceKeyInfo keyInfo = new InvoiceKeyInfo();
        keyInfo.setTaxNum("1464888883494");
        keyInfo.setIsSupportInvoice(true);
        keyInfo.setInvoiceMerchantName("ABC|003");
        invoiceInfo.setKeyInfo(keyInfo);
        invoiceInfo.setDetails("[{\"code\":\"100294400\",\"name\":\"服饰\",\"num\":\"2\",\"sumPrice\":\"200.00\",\"taxRate\":\"6%\"}]");
        model.setInvoiceInfo(invoiceInfo);*/

        // 设置商户订单号
        model.setOutTradeNo("20150320010101001");

        // 设置外部指定买家
        /*ExtUserInfo extUserInfo = new ExtUserInfo();
        extUserInfo.setCertType("IDENTITY_CARD");
        extUserInfo.setCertNo("2088722033555808");
        extUserInfo.setName("李明");
        extUserInfo.setMobile("16587658765");
        extUserInfo.setMinAge("18");
        extUserInfo.setNeedCheckInfo("F");
        extUserInfo.setIdentityHash("27bfcd1dee4f22c8fe8a2374af9b660419d1361b1c207e9b41a754a113f38fcc");
        model.setExtUserInfo(extUserInfo);*/

        // 设置订单总金额
        model.setTotalAmount("88.88");

        // 设置商户传入业务信息
       // model.setBusinessParams("{\"mc_create_trade_ip\":\"127.0.0.1\"}");

        // 设置优惠参数
        //model.setPromoParams("{\"storeIdType\":\"1\"}");

        request.setBizModel(model);
        // 第三方代调用模式下请设置app_auth_token
        // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");

        AlipayTradePagePayResponse response = alipayClient.pageExecute(request, "POST");
        // 如果需要返回GET请求,请使用
        // AlipayTradePagePayResponse response = alipayClient.pageExecute(request, "GET");
        return response.getBody();

    }

    private static AlipayConfig getAlipayConfig() {
        String privateKey  = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCZbzZ/n0DMKfr1y+0YvL2Q38R7HEV4r3AmzVisteCzqpW9Q86dPLlVsUOTSRqT9TMkHsLWd9dZ0YstDJf69PuKsAan6/G0SorfXEXRUAKJtJXq9BKtcNr50XQlirUSj77ziwc6XZfFyRphgcmu0HzRfXJQQnrGGCiSlW1yYxRF6EL9mypi/dHErARyu/qNu1K/kdf+hyrSvAhbvANL4M3RkOjssvFjpXFY+ggQgFdqVp1VTbs6G5/mSWqsSJAiH1DsDQhVmfzQaIoTms8j1gTklBjrZKMq+DBbhm8B5R2PunSwtYFWLgkCkgGUU5me4SAXQRDESV92jsDOxqb6G3WvAgMBAAECggEAblGxPKezflg80hgS3HNwVUcezWmxZam2mJ+Sv3NyIZxoV5H2b8WmeD+hF7g7PODTKYhYjL3UAAeS6wwgBle4uKoBzyDtQ7VJDnoY1PuTJ5HJLQralwwK1g5MVWXa9YKXSCLRSpzasGH87tjTuza6WCG7XIvAHMhn+6Um8VTd0bil0gOYQyJDuzombAxWGbSCv4PfJBMO7xT2HtFxejpCI9wPkJ5hnZ2PzPplmciivQMIWpxZCssDjsAdpjjWH/ETaXr141uD6V+QVQmlWjfCDVCwFGNxJIBkkDmUOE+czyp+q+ssH877F/OYon1s/RuHVli8WRllXjqz167Ov1WveQKBgQDJH+vREzjrOZkQEHbzcQBKuSqnmW+fjdUvfdgCW79JMTn9UN2OQCcgP4B23VqMIKz6oJZKCiPgLQoFeOx62jj4NrR9fZEK7SbHg/uxqjevTvzX1qJQjqFwYGeNvuaks7YGDhaQRHl31G0uZsGTPgcS0r2rn5XVkUuFYDrvYXeKDQKBgQDDTD2Zsou8tTYu1aMNhdHc7+nLw1WEI/lW4HfZ0s+5lbefTRGb23mX6dVYnExyHum64kiEREUZewWZSec8z6/IY0wgWRWBDHIpoRaTSVuu2F9b9PPXCTnbmn3e0q1Blk07nQU90Zjz3indBvmuOPNHiQrgAe1eVlSDeXDDOiZ7qwKBgQDIYcxiRwOLoJw2XCEXVLuUtz2fNAj5b6c6JOhlGSHQ+4GqN7o18wbIY1xLkSiYuil9nyd9ZvLtdBIq95qsn+TosCBNcyBiQXtEhuPq1Auc11akeMzI9AI2Y2Zo3A0RhZdSGxEx9XcMA5IwC+LLH56Oi3a7mkj/Oj6DCShOvc4KtQKBgDNsF6wofvKpJCMgzVX6Lk/mO8ETJaktb7GYWPZZs6hB659eQ4yuNU3ym+JBBT/nM9OpUT7CWw9ifQ7njqNMbBRvUNQToL3h8Q1VBQSzBBj9j94+mRW9sCZKf2n0PvpOAPf5WC/2yDcuAAfallNxW10ykFJ7L2zvfkE/8Jj27rsRAoGAcbr5OLgcxOg5GzK2dNRJWzzif3TU35dX6H+aI0jG8d9ftxNhmEnKGA4ahKmYuCXsk3xpJ+c/iqVIitOnRxqlPCPAE9UyOOFNCYIXx+t2QGuKrX446PF7b0ROQKwPJ4M0ZgJIAkwcwRLbM0Mpgn098dZTEQ+IHAeYxcPuLt75xHU=";
        String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5cKTEguXYKSskkbSXMNxC8rS7Qn4OibXrFIJwxh3/lw+c2/dtBDhl/6Mh1XM1m598UBRgmTvz4cpuYhYqrYgWEritfPEyZe6GU1q6+BKPrDZDX4oRgfFJtXRJfMI6C3otcEpSxkNk1R5UhAADRj8wIoAgVUHo8kZORhRdPLozK8X4/VpMlffdwz+HNvuz8ZfKRFcieNkhFJm3UkctF10ZFPjekkCdFazbqb7mxpA4XL0e1BLLANV57IktOFpwHpUA0YZ3vnSncC+zRJNm4dsl091fszlDFbwLAaXYYLjZQW9MU6ziXnfqXtRseyu1S6JP6RsP7IrXjLRBLAhmCiW+QIDAQAB";
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
        alipayConfig.setAppId("9021000136613031");
        alipayConfig.setPrivateKey(privateKey);
        alipayConfig.setFormat("json");
        alipayConfig.setAlipayPublicKey(alipayPublicKey);
        alipayConfig.setCharset("UTF-8");
        alipayConfig.setSignType("RSA2");
        return alipayConfig;
    }
}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在uniapp中对接支付宝,需要进行以下步骤: 1. 在支付宝开放平台创建应用并获取应用的APP_ID和私钥。 2. 在uniapp项目中引入支付宝JSAPI的SDK,可以使用支付宝官方提供的SDK或者第三方SDK。 3. 在uniapp项目中创建一个页面,用于发起支付请求。 4. 在发起支付请求的页面中,调用支付宝JSAPI的SDK进行支付。 以下是详细流程: 1. 在支付宝开放平台创建应用并获取应用的APP_ID和私钥。 首先,你需要到支付宝开放平台注册并登录账号。 然后,创建一个应用并获取应用的APP_ID和私钥。在创建应用时,需要选择“移动应用”类型,并填写应用的基本信息。 创建完成后,可以在应用详情页中找到APP_ID和私钥。APP_ID是支付宝分配给应用的唯一标识符,私钥用于对支付请求进行签名。 2. 在uniapp项目中引入支付宝JSAPI的SDK。 支付宝官方提供了支付宝JSAPI的SDK,可以通过以下链接下载: https://docs.open.alipay.com/54/103419/ 第三方SDK也可以在GitHub等开源社区中找到。 将SDK文件拷贝到uniapp项目的static目录下,并在需要使用支付宝支付的页面中引入SDK。 例如,在页面的script标签中添加以下代码: ``` javascript import '@/static/alipay-sdk.js' ``` 3. 在uniapp项目中创建一个页面,用于发起支付请求。 在uniapp项目的pages目录下,创建一个新的页面,例如Pay.vue。这个页面用于展示订单信息和发起支付请求。 在Pay.vue中,需要定义一个支付按钮,点击按钮时触发支付请求。同时,需要将订单信息传递给支付宝SDK。 例如,可以在Pay.vue中添加以下代码: ``` html <template> <div> <div>订单金额:{{orderAmount}}</div> <div>订单描述:{{orderDesc}}</div> <button @click="goToPay">立即支付</button> </div> </template> <script> export default { data() { return { orderAmount: '100.00', orderDesc: '测试订单' } }, methods: { goToPay() { // TODO: 调用支付宝SDK进行支付 } } } </script> ``` 在goToPay方法中,需要调用支付宝SDK进行支付。具体实现方式见下一步。 4. 在发起支付请求的页面中,调用支付宝JSAPI的SDK进行支付。 在Pay.vue的goToPay方法中,需要调用支付宝SDK进行支付。 首先,需要将订单信息组装成一个JSON对象,并对该对象进行签名。签名过程需要使用应用的私钥。 例如,可以在goToPay方法中添加以下代码: ``` javascript goToPay() { const orderInfo = { app_id: '应用APP_ID', method: 'alipay.trade.app.pay', charset: 'utf-8', sign_type: 'RSA2', timestamp: new Date().toLocaleString(), version: '1.0', biz_content: JSON.stringify({ body: this.orderDesc, subject: this.orderDesc, out_trade_no: new Date().getTime().toString(), total_amount: this.orderAmount, product_code: 'QUICK_MSECURITY_PAY' }) } const sign = this.sign(orderInfo, '应用私钥') orderInfo.sign = sign } ``` 其中,sign方法用于对订单信息进行签名,具体实现可以参考支付宝官方文档。 接下来,需要调用支付宝SDK的pay方法,将签名后的订单信息作为参数传递给SDK。 例如,可以在goToPay方法中添加以下代码: ``` javascript goToPay() { // 组装订单信息并签名 const orderInfo = { app_id: '应用APP_ID', method: 'alipay.trade.app.pay', charset: 'utf-8', sign_type: 'RSA2', timestamp: new Date().toLocaleString(), version: '1.0', biz_content: JSON.stringify({ body: this.orderDesc, subject: this.orderDesc, out_trade_no: new Date().getTime().toString(), total_amount: this.orderAmount, product_code: 'QUICK_MSECURITY_PAY' }) } const sign = this.sign(orderInfo, '应用私钥') orderInfo.sign = sign // 调用支付宝SDK进行支付 window.AlipayJSBridge.call('tradePay', { orderStr: JSON.stringify(orderInfo) }, function(result) { // 支付结果处理 }) } ``` 其中,window.AlipayJSBridge.call方法用于调用支付宝SDK的pay方法,参数orderStr是签名后的订单信息。 支付结果通过回调函数返回,可以在回调函数中进行处理。 至此,uniapp对接支付宝的流程就完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值