uni-app+java+支付宝支付

前言:最近开发一款医疗类的APP,其中包含了小的商城,支付时需要对接微信和支付宝,本文记录支付宝对接过程。
一:对接准备
参照支付宝的官方文档
开通支付宝开放平台,创建自研应用,如下:
在这里插入图片描述
线上环境需要开通支付签约
在这里插入图片描述
二:uni-app对接支付宝主要代码,uniapp官网

             uni.requestPayment({  
                    provider: 'alipay',  
                    orderInfo: orderInfo,  
                    success: (e) => {  
                        console.log(e);  
                    },  
                    fail: (e) => {  
                        uni.showModal({  
                            content: "支付失败,原因为: " + e.errMsg,  
                            showCancel: false  
                        })  
                    }  
                });

三:JAVA后端需要返回上面uni-app需要的orderInfo信息
pom引入支付jar:

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

配置信息类:

public class AlipayConfig {

    // 1.商户appid
    public static String APPID = "2021001xxxxx";

    //2.私钥 pkcs8格式的
    public static String RSA_PRIVATE_KEY = "MIIEvAIBADAxxxxxx";

    // 3.支付宝公钥
    public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9xxxxx";

    // 4.服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "xxxxay/notify";

    //5.页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
    public static String return_url = "xxxxpay/notify";

    // 6.请求支付宝的网关地址
    public static String URL = "https://openapi.alipay.com/gateway.do";

    // 7.编码
    public static String CHARSET = "UTF-8";

    // 8.返回格式
    public static String FORMAT = "json";

    // 9.加密类型
    public static String SIGNTYPE = "RSA2";

    //10.签约产品代码
    public static String QUICK_MSECURITY_PAY = "QUICK_MSECURITY_PAY";
}

返回orderInfo:

AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID,
                AlipayConfig.RSA_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,
                AlipayConfig.SIGNTYPE);
        //实例化客户端
        //实例化具体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("1601260247752");
        model.setTimeoutExpress("30m");
        model.setTotalAmount("0.01");
        model.setProductCode(AlipayConfig.QUICK_MSECURITY_PAY);
        request.setBizModel(model);
        request.setNotifyUrl(AlipayConfig.notify_url);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            request.setNotifyUrl("http://154.8.185.11:8080/xyjs/"+AlipayConfig.notify_url);
            System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }

上面对接的代码量其实很少,但整个过程并不是很顺利。
支付宝提供了多种支付方式,一开始弄不清楚uniapp是属于APP支付还是手机网站支付,在上面签约的时候就开通了APP支付和手机网站两者。对接遇到出现的一个问题:ALI38173错误,常见问题
如果发现是签名问题,确认参数没有错误的话,可以检查下支付宝公钥,或者通过支付宝开放平台助手重新生成应用私钥,然后用应用公钥重新设置生成新的支付宝公钥。
在这里插入图片描述
参考的一篇博文

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页