支付小程序公钥私钥授权和支付以及公钥模式授权和支付

 config   证书模式

package com.ggba8.ggba.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class InitAlipayConfig {

    @Value("${alipay.shop.private_key}")
    private String privateKey;

    @Value("${alipay.shop.gateway_url}")
    private String serverUrl;

    @Value("${alipay.shop.appid}")
    private String appId;
    @Value("${alipay.shop.app_cert_path}")
    private String appCertPath;
    @Value("${alipay.shop.alipay_public_cert_path}")
    private String alipayPublicCertPath;
    @Value("${alipay.shop.root_cert_path}")
    private String rootCertPath;

    @Bean
    public com.alipay.api.AlipayConfig getAlipayConfig() {
        com.alipay.api.AlipayConfig alipayConfig = new com.alipay.api.AlipayConfig();
        alipayConfig.setPrivateKey(privateKey);
        alipayConfig.setServerUrl(serverUrl);
        alipayConfig.setAppId(appId);
        alipayConfig.setCharset("UTF-8");
        alipayConfig.setSignType("RSA2");
        alipayConfig.setFormat("json");
        alipayConfig.setAppCertPath(appCertPath);
        alipayConfig.setAlipayPublicCertPath(alipayPublicCertPath);
        alipayConfig.setRootCertPath(rootCertPath);
        return alipayConfig;
    }
}

 证书模式

小程序支付        JSPAI_PAY

  @Override
    public String alipay(LogPay log,String passbackParams,String code) throws Exception {
        // 构造请求参数以调用接口
        AlipayTradeCreateRequest request = new  AlipayTradeCreateRequest();
        AlipayTradeCreateModel model = new AlipayTradeCreateModel();//支付宝订单格式
        request.setReturnUrl(return_url);
        request.setNotifyUrl(notify_url);

        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();//验签
        certAlipayRequest.setServerUrl(alipayConfig.getServerUrl());

        certAlipayRequest.setAppId(alipayConfig.getAppId());  //APPID 即创建应用后生成,详情见创建应用并获取 APPID

        certAlipayRequest.setPrivateKey(alipayConfig.getPrivateKey());  //开发者应用私钥,由开发者自己生成
        certAlipayRequest.setFormat("json");  //参数返回格式,只支持 json 格式
        certAlipayRequest.setCharset("UTF-8");  //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
        certAlipayRequest.setSignType("RSA2");  //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
        certAlipayRequest.setCertPath(alipayConfig.getAppCertPath()); //应用公钥证书路径(app_cert_path 文件绝对路径)
        certAlipayRequest.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath()); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
        certAlipayRequest.setRootCertPath(alipayConfig.getRootCertPath());  //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)

        AlipayClient client = new DefaultAlipayClient(certAlipayRequest);

        com.alibaba.fastjson.JSONObject json =  alipayClientUtils2.getAuthToken(code);
        if(json != null){
            String aliOpenID = json.getString("user_id");
            model.setBuyerId(aliOpenID);
            }
        model.setOutTradeNo(log.getOrderId()); //订单号
        if(debug){
            model.setTotalAmount("0.01");
        }else{
            model.setTotalAmount(log.getMoneyInit().floatValue()+""); //金额
        }
        model.setSubject(log.getTitle()); //订单名
        model.setBody(log.getTitle()); //订单描述
        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        model.setTimeoutExpress(timeout_express);
//        params.put("product_code","FAST_INSTANT_TRADE_PAY");
        model.setProductCode("JSAPI_PAY");
        if(StringUtils.isNotBlank(passbackParams)){
            model.setPassbackParams(passbackParams);
        }

        request.setBizModel(model);
        AlipayTradeCreateResponse res = client.certificateExecute(request);
        return res.getBody();
    }

SDK客户端调用生成sdk字符串  passback_params

 @Override
    public String pay(LogPay log,String passbackParams) throws Exception {
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();//验签
        certAlipayRequest.setServerUrl(alipayConfig.getServerUrl());

        certAlipayRequest.setAppId(alipayConfig.getAppId());  //APPID 即创建应用后生成,详情见创建应用并获取 APPID

        certAlipayRequest.setPrivateKey(alipayConfig.getPrivateKey());  //开发者应用私钥,由开发者自己生成
        certAlipayRequest.setFormat("json");  //参数返回格式,只支持 json 格式
        certAlipayRequest.setCharset("UTF-8");  //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
        certAlipayRequest.setSignType("RSA2");  //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
        certAlipayRequest.setCertPath(alipayConfig.getAppCertPath()); //应用公钥证书路径(app_cert_path 文件绝对路径)
        certAlipayRequest.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath()); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
        certAlipayRequest.setRootCertPath(alipayConfig.getRootCertPath());  //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)

        AlipayClient client = new DefaultAlipayClient(certAlipayRequest);

        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        request.setReturnUrl(return_url);
        request.setNotifyUrl(notify_url);
        JSONObject params = new JSONObject();
        params.put("method","alipay.trade.app.pay");
        params.put("out_trade_no",log.getOrderId()); //订单号
        if(debug){
            params.put("total_amount","0.01");
        }else{
            params.put("total_amount",log.getMoneyInit().floatValue()+""); //金额
        }
        params.put("subject",log.getTitle()); //订单名
        params.put("body",log.getTitle()); //订单描述
        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        params.put("timeout_express",timeout_express);
        params.put("product_code","FAST_INSTANT_TRADE_PAY");
        if(StringUtils.isNotBlank(passbackParams)){
            params.put("passback_params",passbackParams);
        }
        request.setBizContent(params.toString());
        AlipayTradeAppPayResponse res = client.sdkExecute(request);
        return res.getBody();
    }

 支付宝证书登录用config   证书模式

package com.ggba8.ggba.utils;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.*;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.AlipayConfig;
import com.ggba8.ggba.entity.Userinfo;
import com.ggba8.ggba.manager.UserinfoMng;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;


@Component
public class AlipayClientUtils2 {

    @Autowired
    private AlipayConfig alipayConfig;


    public  JSONObject getAuthToken(String code) throws AlipayApiException {
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        certAlipayRequest.setServerUrl(alipayConfig.getServerUrl());

        certAlipayRequest.setAppId(alipayConfig.getAppId());  //APPID 即创建应用后生成,详情见创建应用并获取 APPID

        certAlipayRequest.setPrivateKey(alipayConfig.getPrivateKey());  //开发者应用私钥,由开发者自己生成
        certAlipayRequest.setFormat("json");  //参数返回格式,只支持 json 格式
        certAlipayRequest.setCharset("UTF-8");  //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
        certAlipayRequest.setSignType("RSA2");  //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
        certAlipayRequest.setCertPath(alipayConfig.getAppCertPath()); //应用公钥证书路径(app_cert_path 文件绝对路径)
        certAlipayRequest.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath()); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
        certAlipayRequest.setRootCertPath(alipayConfig.getRootCertPath());  //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)

        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);




        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setCode(code);
        request.setGrantType("authorization_code");
        AlipaySystemOauthTokenResponse response = alipayClient.certificateExecute(request);
        if (response.isSuccess()) {
            String body = response.getBody();
            if (!StringUtils.isEmpty(body)) {
                JSONObject jsonObject = JSONObject.parseObject(body);
                JSONObject object = jsonObject.getJSONObject(AlipayClientUtils.AliPayLoginContant.ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE);
                return object;
            }
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        return null;

    }





}

controller

/**
     * 支付宝小程序第三方登陆
     * @param code
     * @param request
     * @param response
     */
    @RequestMapping("/qyStaffAlipay/login")
    public Result qyStaffAlipay(@RequestParam(value = "auth_code") String code,
                                HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            JSONObject json =  AlipayClientUtils.getAuthToken(code);
            if(json != null){
                String aliOpenID = json.getString("user_id");

                if(org.apache.commons.lang3.StringUtils.isNotBlank(aliOpenID)){
                    //登陆业务
                    return this.AliLogin(aliOpenID ,false,request,true);

                }else {
                    logger.error("登录失败:unionId为空");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            logger.error("登录失败:" + e.getMessage());
        }

        return  null;
    }



  公钥私钥模式 config

  // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    @Value("${alipay.shop.appid}")
    public String app_id;

    @Value("${alipay.scan.appid}")
    public String scan_app_id;

    // 商户私钥,您的PKCS8格式RSA2私钥
    @Value("${alipay.shop.private_key}")
    public String merchant_private_key;
    @Value("${alipay.scan.private_key}")
    public String scan_private_key;

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    @Value("${alipay.shop.public_key}")
    public String alipay_public_key;

    @Value("${alipay.scan.public_key}")
    public String scan_public_key;

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    @Value("${alipay.shop.notify_url}")
    public String notify_url;

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    @Value("${alipay.shop.return_url}")
    public String return_url;
    // 签名方式
    @Value("${alipay.shop.sign_type}")
    public String sign_type;

    // 字符编码格式
    @Value("${alipay.shop.charset}")
    public String charset;

    // 支付宝网关
    @Value("${alipay.shop.gateway_url}")
    public String gatewayUrl;

    @Value("${alipay.shop.service}")
    public String service;

    @Value("${alipay.shop.timeout_express}")
    private String timeout_express;
    @Autowired
    private LogPayMng logPayMng;
    @Value("${ggba.debug}")
    private boolean debug;


 

授权码登录 公钥私钥模式   可以试着像证书模式一样先把公钥私钥以
@Configuration交给spring然后引入

package com.ggba8.ggba.utils;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.apache.commons.lang3.StringUtils;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;

import com.alipay.api.response.AlipaySystemOauthTokenResponse;

import static com.alipay.api.AlipayConstants.CHARSET_UTF8;


/**
 * @author wwz
 */
public class AlipayClientUtils {


    /**
     * @author wwz
     */
    public class AliPayLoginContant {

        public final static String BASE_URL = "http://wwz1994.e2.luyouxia.net:22851";
        /**
         * 网关地址
         */
        public final static String SERVICE_URL = "https://openapi.alipay.com/gateway.do";
        /**
         * appid
         */
        public final static String APPID = "xxxx";
        /**
         * 回调地址
         */
        public final static String REDIRECT_URL = "XXXXX";

        /**
         * 支付宝公钥(在签名)
         */
        public final static String ALIPAY_PUBLIC_KEY = "xxxx";

        /**
         * 你自己生成的私钥
         */
        public final static String APP_PRIVATE_KEY = "xxxx";

        public static final String ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE = "alipay_system_oauth_token_response";


    }





    /**
     * 创建单例
     * @return
     */
    private static class AlipayClientHolder{
        private static final AlipayClient alipayClient = new DefaultAlipayClient(AliPayLoginContant.SERVICE_URL, AliPayLoginContant.APPID, AliPayLoginContant.APP_PRIVATE_KEY, "json", CHARSET_UTF8, AliPayLoginContant.ALIPAY_PUBLIC_KEY, "RSA2");
    }



    /**
     * 获取token信息
     * @param code
     * @return
     * @throws AlipayApiException
     */
    public static JSONObject getAuthToken(String code) throws AlipayApiException {
        AlipayClient alipayClient  = AlipayClientHolder.alipayClient;
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setCode(code);
        request.setGrantType("authorization_code");
        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
        if(response.isSuccess()){
            String body = response.getBody();
            if(!StringUtils.isEmpty(body)){
                JSONObject jsonObject = JSONObject.parseObject(body);
                JSONObject object = jsonObject.getJSONObject(AliPayLoginContant.ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE);
                return object;
            }
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        return null;
    }


}

正常的公钥私钥支付

小程序支付

service

    String alipay(LogPay log, String passbackParams,String code) throws Exception;

serviceimpl

 @Override
    public String alipay(LogPay log,String passbackParams,String code) throws Exception {
        // 构造请求参数以调用接口
        AlipayTradeCreateRequest request = new  AlipayTradeCreateRequest();
        AlipayTradeCreateModel model = new AlipayTradeCreateModel();
        request.setReturnUrl(return_url);
        request.setNotifyUrl(notify_url);

        AlipayClient client = new DefaultAlipayClient(gatewayUrl,app_id,merchant_private_key,"json",charset,alipay_public_key,sign_type);
        com.alibaba.fastjson.JSONObject json =  AlipayClientUtils.getAuthToken(code);
        if(json != null){
            String aliOpenID = json.getString("user_id");
            model.setBuyerId(aliOpenID);
            }
        model.setOutTradeNo(log.getOrderId()); //订单号
        if(debug){
            model.setTotalAmount("0.01");
        }else{
            model.setTotalAmount(log.getMoneyInit().floatValue()+""); //金额
        }
        model.setSubject(log.getTitle()); //订单名
        model.setBody(log.getTitle()); //订单描述
        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        model.setTimeoutExpress(timeout_express);
//        params.put("product_code","FAST_INSTANT_TRADE_PAY");
        model.setProductCode("JSAPI_PAY");
        if(StringUtils.isNotBlank(passbackParams)){
            model.setPassbackParams(passbackParams);
        }

        request.setBizModel(model);
        AlipayTradeCreateResponse res = client.certificateExecute(request);
        return res.getBody();
    }

SDK客户端调用生成sdk字符串   FAST_INSTANT_TRADE_PAY支付

service

String pay(LogPay log, String passbackParams) throws Exception;

serviceimpl

  @Override
    public String pay(LogPay log,String passbackParams) throws Exception {
        AlipayClient client = new DefaultAlipayClient(gatewayUrl,app_id,merchant_private_key,"json",charset,alipay_public_key,sign_type);

        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        request.setReturnUrl(return_url);
        request.setNotifyUrl(notify_url);
        JSONObject params = new JSONObject();
        params.put("method","alipay.trade.app.pay");
        params.put("out_trade_no",log.getOrderId()); //订单号
        if(debug){
            params.put("total_amount","0.01");
        }else{
            params.put("total_amount",log.getMoneyInit().floatValue()+""); //金额
        }
        params.put("subject",log.getTitle()); //订单名
        params.put("body",log.getTitle()); //订单描述
        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        params.put("timeout_express",timeout_express);
        params.put("product_code","FAST_INSTANT_TRADE_PAY");
        if(StringUtils.isNotBlank(passbackParams)){
            params.put("passback_params",passbackParams);
        }
        request.setBizContent(params.toString());
        AlipayTradeAppPayResponse res = client.sdkExecute(request);
        return res.getBody();
    }




 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支付宝应用的开发者需要使用应用的公钥私钥进行数据的加密和解密。支付宝应用的公钥是用于加密数据的,只能由支付宝生成。私钥则是用于解密数据的,只有开发者自己持有。这两个密钥都是非常重要的,需要妥善保管。 应用的公钥是一串由支付宝生成的密钥,用于对敏感数据进行加密传输。开发者在调用支付宝接口时,需要使用公钥对请求参数进行加密,确保数据传输过程中的安全性。而支付宝在接收到加密的数据后,则可以使用自己的私钥进行解密,获得原始数据。 应用的私钥是开发者自己生成的密钥,用于对从支付宝返回的加密数据进行解密。当开发者向支付宝发起请求后,支付宝会对返回数据进行加密,然后使用应用的公钥进行加密,最后再将加密后的数据返回给开发者。开发者收到加密的数据后,需要使用自己的私钥对其进行解密,方可获取支付宝返回的原始数据。 为了保证支付宝应用数据的安全性,开发者应妥善保管好应用的公钥私钥公钥可以在支付宝开放平台的管理后台获取和更换;私钥则需要妥善保管,避免丢失或泄露。使用过程中,开发者需要合理使用公钥私钥进行数据的加密解密,并注意及时更新密钥以提高安全性。 综上所述,支付宝应用id公钥私钥是用于支付宝应用数据加密和解密的密钥,具有保护数据安全的重要作用。开发者应妥善保管和使用这些密钥,确保支付宝应用数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值