支付宝app支付java服务端

今天更新一篇支付宝java服务端的博客吧,原来想写一个的,不过因为某些原因前段时间没写。这几天公司做了支付功能,发一篇吧! 
新版支付宝app支付是真的舒服,爽的一匹,什么都封装好了,基本不用我们干什么,直接拿来sdk用

先去支付宝开放平台下载了sdk附上网址:https://docs.open.alipay.com/54/106370/

解压出来是这样的这里写图片描述 
我们只需要用我画红线的就好了,拿来导入到项目里面。

先写一个配置类 
把私钥公钥什么的放里面,

    //私钥
    public final static String APP_PRIVATE_KEY = "";
    //支付宝分配给开发者的应用ID
    public final static String APP_ID = "";
    //请求使用的编码格式,如utf-8,gbk,gb2312等
    public final static String charset = "UTF-8";
    //应用公钥
    public final static String ALIPAY_PUBLIC_KEY = "";
    //支付宝公钥
    public final static String ALIPAYPUBLICKEY = "";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

应用公钥和支付宝公钥是不一样的,不要搞混了,用处也不一样,下面会说

生成APP支付订单信息

//实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                APP_ID,//appid
                APP_PRIVATE_KEY,//私钥
                "json", //格式,仅支持json
                charset,//请求编码格式
                ALIPAY_PUBLIC_KEY,//应用公钥
                "RSA2");//签名算法类型,支持RSA2和RSA,推荐使用的是RSA2
        Map map = Maps.newHashMap();
        //实例化具体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("标题");
        model.setOutTradeNo("唯一订单号(自己生成的)");
        model.setTimeoutExpress("30m");//一般用不到这个
        model.setTotalAmount("0.01");//这个嘛就是钱喽
        model.setProductCode("QUICK_MSECURITY_PAY");//商家和支付宝签约的产品码,为固定值
        request.setBizModel(model);
        request.setNotifyUrl("异步地址");//外网异步回调地址,是需要外网能够访问到的
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            map.put("data",response.getBody());//这里直接把订单信息给app端就好了,让他直接拿着去调起支付宝
            map.put("status",0);
            return map;
        } catch (AlipayApiException e) {
            e.printStackTrace();
            map.put("status",1);
            return map;
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

这里客户端去拿着你的数据去调用支付宝付款的时候有可能会出现ali40247这个错误代码,这里说下解决办法,最有可能的就是编码问题,还有没有上线的话也是会出现这个情况的,可以去支付宝查看是不是一上线了步骤是:管理中心》我的应用》状态》(注意:)已上线才可以使用 
编码问题的话就是,你这边直接把订单信息给app了,然后app自己又做了处理,是不需要做处理的,直接拿了用就行了。 
这两个常见的把,解决不了的话可以去这里:https://tech.open.alipay.com/support/knowledge/index.htm?knowledgeId=201602060009&categoryId=24120#/?_k=xqdo9j

服务端回调

        //获取支付宝POST过来反馈信息
        System.out.println("支付宝回调");
        Map<String,String> params = new HashMap<String,String>();
        Map requestParams = request.getParameterMap();
        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] + ",";
            }
            //乱码解决,这段代码在出现乱码时使用。
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        boolean flag = AlipaySignature.rsaCheckV1(params, 
        ALIPAYPUBLICKEY, //这里是支付宝公钥不是应用公钥
        charset,"RSA2");//验签不通过支付宝会一直回调你的异步回调
        if (flag){
            if("TRADE_SUCCESS".equals(params.get("trade_status"))){
                //这里写业务逻辑,操作数据库等操作
                return "success";//成功返给支付宝成功就行了,
            }
        }
        return "error";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

好了支付宝支付就ok了,有什么不懂欢迎留言评论交流!谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值