美文网首页
[Java] 服务端实现 支付宝/微信 登录/支付/转账

[Java] 服务端实现 支付宝/微信 登录/支付/转账

作者: 巨馍蘸酱 | 来源:发表于2022-11-13 16:03 被阅读0次

吐槽一下, 简书内容没有自带目录, 且中间内容区域太窄

集成

支付宝

  • 开发者应用配置
  • Maven 依赖
<!-- 支付宝 -->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.34.47.ALL</version>
</dependency>
  • yml配置
alipay: # 支付宝配置
  appid: 123
  ...

微信支付

微信登录/分享社交类 和 微信支付是分开的

微信支付 所有示例都在 https://github.com/wechatpay-apiv3/wechatpay-java/blob/main/service/src/example, 请自由查看

SDK https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml

  • Maven 依赖
<!-- 微信 https://github.com/wechatpay-apiv3/wechatpay-java -->
<dependency>
  <groupId>com.github.wechatpay-apiv3</groupId>
  <artifactId>wechatpay-java</artifactId>
  <version>0.2.1</version>
</dependency>
  • yml配置
wechatpay: # 微信支付配置
  appid: 123
  ...

登录

支付宝

目前广泛应用于支付宝用户在合作商家端的快速登录场景和支付宝开放业务的免登录使用场景等。[1]

先获取 token, 再获取用户信息

  1. alipay.system.oauth.token(换取授权访问令牌) https://opendocs.alipay.com/open/02ailc?ref=api
  2. alipay.user.info.share(支付宝会员授权信息查询接口) https://opendocs.alipay.com/open/02aild?ref=api

微信

移动应用微信登录开发指南 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html

支付

支付宝

外部商户APP唤起快捷SDK创建订单并支付[2]

alipay.trade.app.pay(app支付接口2.0) https://opendocs.alipay.com/open/02e7gq?ref=api&scene=20

微信

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按Native、JSAPI、APP等不同场景生成交易串调起支付。

APP下单API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml

转账

支付宝

转账到支付宝账户是为了满足支付宝商家向其他支付宝账户进行单笔转账的需求,针对具备开发能力的商家,提供通过 API 接口完成单笔转账的功能。商家只需输入另一个正确的支付宝账号,即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广,可用于商家间的货款结算、转账汇款,商家给企业或个人发放佣金等。[3]

支付宝提供的站内转账功能,需要商家登录支付宝网站进行操作。部分拥有自身业务系统(如 CRM、ERP 等)的商家,希望支付宝提供转账接口,与自身业务系统直接对接实现转账功能,而不是频繁登录支付宝网站转账。为解决上述问题,支付宝为具备开发能力的商家提供了转账到支付宝账户产品,满足了商家通过接口集成,由商家自身业务系统完成支付宝转账功能的需求。[3]

alipay.fund.trans.uni.transfer(单笔转账接口) https://opendocs.alipay.com/open/02byuo

    public void transfer(String payeeIdentity, String payeeInfoIdentityType, String payeeName,
                         String outBizNo, String transAmount,
                         String orderTitle, String remark) throws AlipayApiException {

        CertAlipayRequest alipayConfig = new CertAlipayRequest();
        alipayConfig.setPrivateKey(privateKey);
        alipayConfig.setServerUrl(serverUrl);
        alipayConfig.setAppId(appId);
        alipayConfig.setFormat(format);
        alipayConfig.setCharset(charset);
        alipayConfig.setSignType(signType);
        alipayConfig.setCertPath(certPath);
        alipayConfig.setAlipayPublicCertPath(alipayPublicCertPath);
        alipayConfig.setRootCertPath(rootCertPath);

        Participant payeeInfo = new Participant();
        payeeInfo.setIdentity(payeeIdentity);
        payeeInfo.setIdentityType(payeeInfoIdentityType);
        payeeInfo.setName(payeeName);

        AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
        model.setPayeeInfo(payeeInfo);
        model.setOutBizNo(outBizNo);
        model.setTransAmount(transAmount);
        model.setProductCode(productCode);
        model.setBizScene(bizScene);
        model.setOrderTitle(orderTitle);
        model.setRemark(remark);
        model.setBusinessParams(businessParams);

        AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
        request.setBizModel(model);

        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);

        if (response.isSuccess()) {
            System.out.println("调用成功");
            String responseOutBizNo = response.getOutBizNo();
            String responseOrderId =  response.getOrderId();
            String responsePayFundOrderId = response.getPayFundOrderId();
            String responseTransDate =  response.getTransDate();

        } else {
            System.out.println("调用失败");
        }
    }

微信

商户可以通过该接口同时向多个用户微信零钱进行转账操作。

发起商家转账API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml

异步通知

支付宝

异步通知说明 https://opendocs.alipay.com/open/204/105301

    @ApiOperation("支付宝异步通知")
    @PostMapping("/alipay_async")
    public String alipay_async(HttpServletRequest request) {
        Map requestParams = request.getParameterMap();

        //获取支付宝POST过来反馈信息,将异步通知中收到的待验证所有参数都存放到map中
        Map<String, String> params = new HashMap<>();
        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);
        }

        try {
            //调用SDK验证签名
            //公钥验签示例代码
            boolean signVerified = AlipaySignature.rsaCheckV1(params, "ALIPAY_PUBLIC_KEY", "CHARSET", "sign_type");
            //公钥证书验签示例代码
            //boolean flag = AlipaySignature.rsaCertCheckV1(params,alipayPublicCertPath,"UTF-8","RSA2");
            if (signVerified) {
                // TODO 验签成功后
                //按照支付结果异步通知中的描述,对支付结果中的业务内容进行1\2\3\4二次校验,校验成功后在response中返回success
            } else {
                // TODO 验签失败则记录异常日志,并在response中返回fail.
                return "fail";
            }
        } catch (AlipayApiException e) {
            //throw new RuntimeException(e);
            return "fail";
        }
        return "success";
    }

微信

微信支付通过支付通知接口将用户支付成功消息通知给商户

支付通知API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_5.shtml


  1. https://opendocs.alipay.com/open/218/105329

  2. https://opendocs.alipay.com/open/02e7gq?scene=common

  3. https://opendocs.alipay.com/open/309/106235?ref=api

相关文章

  • 微信,支付宝会计应该走哪个会计科目

    微信转账和支付宝应该走哪个会计科目 (一)微信转账和支付宝可以计入其他货币资金科目,下设微信和支付宝二级明细。 (...

  • 转账需要确认?——可能不是你想的那么简单

    关于转账是否需要确认,微信和支付宝给出了相反的答案——微信转账需要确认,支付宝转账不需要确认。 那么转账是否需要确...

  • GO微信小程序登录和支付

    本文仅适用于微信小程序登录、支付golang服务器实现,而通用golang支付实现(支付宝、微信)请看另一篇。 [...

  • 借款关系证据收集问题

    除了写借条的借款方式, 朋友之间最容易在微信或者支付宝上转账借款。 那么,微信和支付宝的转账记录是否可以作为证明存...

  • 微信APP支付和退款(JAVA)

    微信APP支付和退款 微信支付流程说明 Java demo实例 退款 转账 1、微信支付 1 微信支付流程说明 本...

  • 诚信收贝

    0.22每贝,目标一万,微信支付宝都可以转账。

  • 商城实现主要功能

    标签 :学习向导 支付功能实现 腾讯易宝支付接口 微信支付接口 支付宝沙箱环境测试支付接口 登录/注册验证 验证码...

  • 在App中对接微信和支付宝

    目录 准备工作 微信登录和支付 支付宝登录和支付 对比 准备工作 微信 注册微信开放平台,成为开发者(开发) 注册...

  • 听说微信能翻译文献,支付宝能下载文献了??

    微信支付宝拿来写论文 大家有尝试过吗? 竟然有? (不敢相信脸) 你说微信来联系代写 支付宝来给代写转账 ??? ...

  • 花钱方便更要捂好钱袋子

    #支付宝已支持给微信好友转账#自从有了微信,有了支付宝,人们消费越来越便捷,手机一扫完成支付。出门不用带钱包,想要...

网友评论

      本文标题:[Java] 服务端实现 支付宝/微信 登录/支付/转账

      本文链接:https://www.haomeiwen.com/subject/lcftxdtx.html