简介
本文详细介绍通过支付宝开放平台开发助手生成密钥对、支付宝证书申请 CSR 文件步骤。
说明:生成密钥、CSR 文件后,开发者需根据 生成并配置密钥 指引,完成控制台及接口调用配置。
前提条件
• 已完成开发者入驻以及实名认证。详情可查看 支付宝个人账号注册及实名认证、支付宝企业账号注册及实名认证。
• 已下载并安装下载密钥生成工具(支付宝开放平台开发助手)。
获取工具
• WINDOWS(Windows 版本工具请不要安装在含有空格的目录路径下,否则会导致公私钥乱码的问题)。
• MAC_OSX
原理介绍
支付宝开放平台开发助手提供了一键生成密钥功能,便于开发者生成一对 RSA 密钥(应用公钥、应用私钥)以及公钥证书申请 CSR 文件(在线申请应用公钥证书需要)。
注意事项
• 应用公钥(public key)需提供给支付宝账号管理者上传到支付宝开放平台。
• 应用私钥(private key)由开发者自己保存,需填写到代码中供签名时使用。
• 生成的私钥需妥善保管,避免遗失,不要泄露。
• 密钥和应用(APPID)一一对应,即开发者需要为名下的每个应用分别设置密钥,且不同应用的密钥不能混用。
公钥方式
本步骤指引以 MAC_OSX 界面为例。

  1. 根据开发语言选择密钥格式和密钥长度。
    说明:
    • 新建应用请务必使用 RSA2 密钥长度 即 2048 位。详情可查看 开放平台证书升级指南。
    • 目前已使用 RSA 密钥长度即 1024 位密钥长度的应用仍然可以正常调用接口。

    点击 生成密钥,工具会自动生成商家应用公钥(public_key)和应用私钥(private_key)。随后点击 打开密钥文件路径。

    在弹出的 RSA密钥 文件夹下即可找到生成的公私钥文件。
    根据 生成并配置密钥 指引完成密钥配置。

公钥证书方式
本步骤指引以 MAC_OSX 界面为例。
2. 在开发助手工具的生成密钥工具,密钥长度选择 RSA2,密钥格式选择 PKCS8(Java适用),点击 获取CSR文件 后的 点击获取,生成应用公钥证书 CSR 申请文件。

  1. 在弹出的获取 CSR 对话框中根据提示填写相关信息,支付宝会根据提供的信息创建证书的标识名称,用来识别证书,点击 生成 CSR 文件。
    说明:
    • 组织/公司:名称一定要和开发者中心门户账号信息的公司名称保持一致,否则会导致后续步骤中上传 CSR 证书文件校验失败。
    • 沙箱环境下配置 CSR 公钥证书时,若沙箱账号为:
    • 2020 年 07 月 24 日前获取的沙箱账号,组织/公司 需固定填写 沙箱环境。
    • 2020 年 07 月 24 日后获取的沙箱账号,组织/公司 需填写沙箱商家账号,例如:沙箱商家账号为 xxx@sandbox.com,组织/公司就需要配置成 xxx@sandbox.com。
    • 域名 建议填写商家/服务商公司域名地址。

    在生成 CSR 文件后,点击 打开文件位置,在对应的文件夹里可以看到三个文件:应用公钥 key 串、应用私钥 key 串,以及 .csr 格式的应用公钥证书申请文件。

    根据 生成并配置密钥 指引完成密钥配置

alipay.trade.close(统一收单交易关闭接口)

请求示例

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();
JSONObject bizContent = new JSONObject();
bizContent.put("trade_no", "2013112611001004680073956707");
request.setBizContent(bizContent.toString());
AlipayTradeCloseResponse response = alipayClient.execute(request);
if(response.isSuccess()){System.out.println("调用成功");
} else {System.out.println("调用失败");
}

响应示例

{"alipay_trade_close_response": {"code": "10000","msg": "Success","trade_no": "2013112111001004500000675971","out_trade_no": "YX_001"},"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}

xml配置

<alipay_trade_close_response> <code>10000</code>  <msg>Success</msg>  <trade_no>2013112111001004500000675971</trade_no>  <out_trade_no>YX_001</out_trade_no>
</alipay_trade_close_response>

跳转支付宝链接
https://www.merchant.com/receive_notify.htm?notify_type=trade_status_sync&notify_id=91722adff935e8cfa58b3aabf4dead6ibe&notify_time=2017-02-16 21:46:15&sign_type=RSA2&sign=WcO+t3D8Kg71dTlKwN7r9PzUOXeaBJwp8/FOuSxcuSkXsoVYxBpsAidprySCjHCjmaglNcjoKJQLJ28/Asl93joTW39FX6i07lXhnbPknezAlwmvPdnQuI01HZsZF9V1i6ggZjBiAd5lG8bZtTxZOJ87ub2i9GuJ3Nr/NUc9VeY=&trade_no=null&app_id=null&out_trade_no=null&out_biz_no=null&buyer_logon_id=null&seller_id=null&seller_email=null&trade_status=null&total_amount=null&refund_fee=null&subject=null&body=null&gmt_create=null&gmt_payment=null&gmt_refund=null&gmt_close=null&fund_bill_list=null&receipt_amount=null&invoice_amount=null&buyer_pay_amount=null&point_amount=null&buyer_id=null

统一收单线下交易查询

package com.java.sdk.demo;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.AlipayConfig;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.FileItem;
import java.util.Base64;
import java.util.ArrayList;
import java.util.List;public class AlipayTradeQuery {public static void main(String[] args) throws AlipayApiException {String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCSmzXtQZafZ2rA/jI2vP+ww+BWQeMsvIYWntiaCcxsOCS/fRI6BwfcKatwPTrr5Dz39w8rDJymglPi/9VxpXylBLyXEL9G4z2+Dq5J4EY89oDlbyW1ocggE/owFNvbPwnkpn1hCXGxvwYG4iz7sOn8TeR3n+1UJH1o4p7xutq2jAsF5HmfGJQpB51WKX4DNn0vIkSeFZj3DfcQ57UlieWfCexmwf5yR590LtMbE+y7EDCCTtB/ZnAUYs0/C5kXI0HlD5+st5x1bV+33RqJzd29DN5zp/Og+KDYSLvqS2tz3XytUew4cPaqkaWgjSko9zCyuaYcTJrjM0VeqysxygT3AgMBAAECggEAC9lxrWB8vRuNvFWPV29FN1NNoYsnwmjmaZOjLCgYlrKe/b8tJvWEhB32FldMmN5UszILzs3xJ2AnSZSl+s6GWYwddhRLcX5ScjcbjSsMYkcGOgUWxixyUW1r7lDxSDI7KXjvb1VlFBm9cfb77cfp0ZO2IJkThJaCcGTItf8FSHW/Lm6dmbo+HXnGyqhN9rPjAwzk4ieo1PsN1oyNJ1knOfWkIbQXFzYjQXZtBtiePMlbNuBAzAAx2cJ8lI6F+42wEvmYD2g4YEEFLwgoML+jMUCKHykO1uFVfK0WoxMOOLxU4OXxLRWbKyGtc+bzTONfKfJK6VRVJWYjnOCMzB2iaQKBgQDwT27J+WDZNbZRzvIQ9ZhlTTpVY7d1E+rN6CWI9Cq3ApyL+9H/Sfus/jJP8IswEvSGxBT6zrhvRK7Fi0XY7f9I377ULcTKveWnWW9Eu0DbMfvVT8XXitkjf8wl+6EqL+L8OwffeQxJbpqQqnOPyPoOgwcotEjsjFbrXONpPiQVJQKBgQCcLZniFiOb1wzZEEYKK9SfWjO3yr/QcKagBR76qQUqTeYM41z9Naw+paeGofkM0Llo375q6yiSxJI7RHcXxyUN0ZIuw5xeYWNnXdUnASjsRM8MWCqzQ2YtdPkdcIpkRBjGRWZqXC8RPXiHFkSN1QJ+3c4wfALJwUSY4exoLBNs6wKBgEvWJXZj1qZ1huXmUwn7F27QoloUL+8oq+7zFfVUaK58in66p5jS9jOvvJzxols3gCePdbd4yUeD+0uoGhDNesS6p3Q6RWJd7z2SwcSE+4CxE3JLzHmq/b9wMzLBaCjyF8XVszRY9QGvf+OrhvCXUiKGQxobWvAbkcqQ88tgqu5pAoGASttAirD52FQ3AENgjrd7bfWaHFm9nnagJsrNkm843pH/1eWUSHlVWaGkrk8sRAw3EiFL74tPIym8vVOPkYIOLJVqb6eqZ0JelsjOxac0qipA4zXPIaUIcHlEfevXKT/KcB4LfKc6mBTSlE0EBsc2LwC5N1v5KiLMckq3OScHGIkCgYANfP5cGyKySkn2BzTlILnWu+uPHuqaAIV6Fc+Z6h/WbdXw2opdEP3A7GEUQUY6fjYj6AD8Jutn3sz1yd7l5ly+TX6I6YFJ5xHcFcxvl9m/kZIbps+wUjn5mJYZaGcnm2ZYvUD+I0VERLX2yBWg0SWXGuY/Z3mwe4D8nJxZNC4o4g==";String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjedhtEgisXmKUQ9B+P+IldGYB6Qmo8eZi5cZdJzXPDlDMwofCwQqr8+XTjbhhAWMkMdWbR+pewVjAjcelF0apeRyAJlf9rLi0fADc9XdK32fjPXyUKRRyUX5obguTNaC7w3DoQm5MYnxxaWStFisXkyrIKM3E5ibN0ansdCC8+zF5XfdOffEl/5ohgTM79l1e4LRM/O3ei52fs2Ip03coUrnfeWCvzActeLby+z1rFW9BY3u/DkcSlwAOl3XPIg1r9yulXSDm8W49TDvLgnMIEXyVoOgmjckyOl7vKWti9fiDJ+RnARve01EjIpZx5NNM1MuDx/4OkIiNydgTXJZ1wIDAQAB";AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setServerUrl("https://openapi.alipaydev.com/gateway.do");alipayConfig.setAppId("2021000121663960");alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat("json");alipayConfig.setAlipayPublicKey(alipayPublicKey);alipayConfig.setCharset("UTF8");alipayConfig.setSignType("RSA2");AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();AlipayTradeQueryModel model = new AlipayTradeQueryModel();request.setBizModel(model);AlipayTradeQueryResponse response = alipayClient.execute(request);System.out.println(response.getBody());if (response.isSuccess()) {System.out.println("调用成功");} else {System.out.println("调用失败");}}
}

统一交易退款接口

package com.java.sdk.demo;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.AlipayConfig;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.alipay.api.FileItem;
import java.util.Base64;
import java.util.ArrayList;
import java.util.List;public class AlipayTradeRefund {public static void main(String[] args) throws AlipayApiException {String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCSmzXtQZafZ2rA/jI2vP+ww+BWQeMsvIYWntiaCcxsOCS/fRI6BwfcKatwPTrr5Dz39w8rDJymglPi/9VxpXylBLyXEL9G4z2+Dq5J4EY89oDlbyW1ocggE/owFNvbPwnkpn1hCXGxvwYG4iz7sOn8TeR3n+1UJH1o4p7xutq2jAsF5HmfGJQpB51WKX4DNn0vIkSeFZj3DfcQ57UlieWfCexmwf5yR590LtMbE+y7EDCCTtB/ZnAUYs0/C5kXI0HlD5+st5x1bV+33RqJzd29DN5zp/Og+KDYSLvqS2tz3XytUew4cPaqkaWgjSko9zCyuaYcTJrjM0VeqysxygT3AgMBAAECggEAC9lxrWB8vRuNvFWPV29FN1NNoYsnwmjmaZOjLCgYlrKe/b8tJvWEhB32FldMmN5UszILzs3xJ2AnSZSl+s6GWYwddhRLcX5ScjcbjSsMYkcGOgUWxixyUW1r7lDxSDI7KXjvb1VlFBm9cfb77cfp0ZO2IJkThJaCcGTItf8FSHW/Lm6dmbo+HXnGyqhN9rPjAwzk4ieo1PsN1oyNJ1knOfWkIbQXFzYjQXZtBtiePMlbNuBAzAAx2cJ8lI6F+42wEvmYD2g4YEEFLwgoML+jMUCKHykO1uFVfK0WoxMOOLxU4OXxLRWbKyGtc+bzTONfKfJK6VRVJWYjnOCMzB2iaQKBgQDwT27J+WDZNbZRzvIQ9ZhlTTpVY7d1E+rN6CWI9Cq3ApyL+9H/Sfus/jJP8IswEvSGxBT6zrhvRK7Fi0XY7f9I377ULcTKveWnWW9Eu0DbMfvVT8XXitkjf8wl+6EqL+L8OwffeQxJbpqQqnOPyPoOgwcotEjsjFbrXONpPiQVJQKBgQCcLZniFiOb1wzZEEYKK9SfWjO3yr/QcKagBR76qQUqTeYM41z9Naw+paeGofkM0Llo375q6yiSxJI7RHcXxyUN0ZIuw5xeYWNnXdUnASjsRM8MWCqzQ2YtdPkdcIpkRBjGRWZqXC8RPXiHFkSN1QJ+3c4wfALJwUSY4exoLBNs6wKBgEvWJXZj1qZ1huXmUwn7F27QoloUL+8oq+7zFfVUaK58in66p5jS9jOvvJzxols3gCePdbd4yUeD+0uoGhDNesS6p3Q6RWJd7z2SwcSE+4CxE3JLzHmq/b9wMzLBaCjyF8XVszRY9QGvf+OrhvCXUiKGQxobWvAbkcqQ88tgqu5pAoGASttAirD52FQ3AENgjrd7bfWaHFm9nnagJsrNkm843pH/1eWUSHlVWaGkrk8sRAw3EiFL74tPIym8vVOPkYIOLJVqb6eqZ0JelsjOxac0qipA4zXPIaUIcHlEfevXKT/KcB4LfKc6mBTSlE0EBsc2LwC5N1v5KiLMckq3OScHGIkCgYANfP5cGyKySkn2BzTlILnWu+uPHuqaAIV6Fc+Z6h/WbdXw2opdEP3A7GEUQUY6fjYj6AD8Jutn3sz1yd7l5ly+TX6I6YFJ5xHcFcxvl9m/kZIbps+wUjn5mJYZaGcnm2ZYvUD+I0VERLX2yBWg0SWXGuY/Z3mwe4D8nJxZNC4o4g==";String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjedhtEgisXmKUQ9B+P+IldGYB6Qmo8eZi5cZdJzXPDlDMwofCwQqr8+XTjbhhAWMkMdWbR+pewVjAjcelF0apeRyAJlf9rLi0fADc9XdK32fjPXyUKRRyUX5obguTNaC7w3DoQm5MYnxxaWStFisXkyrIKM3E5ibN0ansdCC8+zF5XfdOffEl/5ohgTM79l1e4LRM/O3ei52fs2Ip03coUrnfeWCvzActeLby+z1rFW9BY3u/DkcSlwAOl3XPIg1r9yulXSDm8W49TDvLgnMIEXyVoOgmjckyOl7vKWti9fiDJ+RnARve01EjIpZx5NNM1MuDx/4OkIiNydgTXJZ1wIDAQAB";AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setServerUrl("https://openapi.alipaydev.com/gateway.do");alipayConfig.setAppId("2021000121663960");alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat("json");alipayConfig.setAlipayPublicKey(alipayPublicKey);alipayConfig.setCharset("UTF8");alipayConfig.setSignType("RSA2");AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();AlipayTradeRefundModel model = new AlipayTradeRefundModel();model.setRefundAmount("200.12");request.setBizModel(model);AlipayTradeRefundResponse response = alipayClient.execute(request);System.out.println(response.getBody());if (response.isSuccess()) {System.out.println("调用成功");} else {System.out.println("调用失败");}}
}

查询对账单下载地址

package com.java.sdk.demo;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.AlipayConfig;
import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
import com.alipay.api.domain.AlipayDataDataserviceBillDownloadurlQueryModel;
import com.alipay.api.FileItem;
import java.util.Base64;
import java.util.ArrayList;
import java.util.List;public class AlipayDataDataserviceBillDownloadurlQuery {public static void main(String[] args) throws AlipayApiException {String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCSmzXtQZafZ2rA/jI2vP+ww+BWQeMsvIYWntiaCcxsOCS/fRI6BwfcKatwPTrr5Dz39w8rDJymglPi/9VxpXylBLyXEL9G4z2+Dq5J4EY89oDlbyW1ocggE/owFNvbPwnkpn1hCXGxvwYG4iz7sOn8TeR3n+1UJH1o4p7xutq2jAsF5HmfGJQpB51WKX4DNn0vIkSeFZj3DfcQ57UlieWfCexmwf5yR590LtMbE+y7EDCCTtB/ZnAUYs0/C5kXI0HlD5+st5x1bV+33RqJzd29DN5zp/Og+KDYSLvqS2tz3XytUew4cPaqkaWgjSko9zCyuaYcTJrjM0VeqysxygT3AgMBAAECggEAC9lxrWB8vRuNvFWPV29FN1NNoYsnwmjmaZOjLCgYlrKe/b8tJvWEhB32FldMmN5UszILzs3xJ2AnSZSl+s6GWYwddhRLcX5ScjcbjSsMYkcGOgUWxixyUW1r7lDxSDI7KXjvb1VlFBm9cfb77cfp0ZO2IJkThJaCcGTItf8FSHW/Lm6dmbo+HXnGyqhN9rPjAwzk4ieo1PsN1oyNJ1knOfWkIbQXFzYjQXZtBtiePMlbNuBAzAAx2cJ8lI6F+42wEvmYD2g4YEEFLwgoML+jMUCKHykO1uFVfK0WoxMOOLxU4OXxLRWbKyGtc+bzTONfKfJK6VRVJWYjnOCMzB2iaQKBgQDwT27J+WDZNbZRzvIQ9ZhlTTpVY7d1E+rN6CWI9Cq3ApyL+9H/Sfus/jJP8IswEvSGxBT6zrhvRK7Fi0XY7f9I377ULcTKveWnWW9Eu0DbMfvVT8XXitkjf8wl+6EqL+L8OwffeQxJbpqQqnOPyPoOgwcotEjsjFbrXONpPiQVJQKBgQCcLZniFiOb1wzZEEYKK9SfWjO3yr/QcKagBR76qQUqTeYM41z9Naw+paeGofkM0Llo375q6yiSxJI7RHcXxyUN0ZIuw5xeYWNnXdUnASjsRM8MWCqzQ2YtdPkdcIpkRBjGRWZqXC8RPXiHFkSN1QJ+3c4wfALJwUSY4exoLBNs6wKBgEvWJXZj1qZ1huXmUwn7F27QoloUL+8oq+7zFfVUaK58in66p5jS9jOvvJzxols3gCePdbd4yUeD+0uoGhDNesS6p3Q6RWJd7z2SwcSE+4CxE3JLzHmq/b9wMzLBaCjyF8XVszRY9QGvf+OrhvCXUiKGQxobWvAbkcqQ88tgqu5pAoGASttAirD52FQ3AENgjrd7bfWaHFm9nnagJsrNkm843pH/1eWUSHlVWaGkrk8sRAw3EiFL74tPIym8vVOPkYIOLJVqb6eqZ0JelsjOxac0qipA4zXPIaUIcHlEfevXKT/KcB4LfKc6mBTSlE0EBsc2LwC5N1v5KiLMckq3OScHGIkCgYANfP5cGyKySkn2BzTlILnWu+uPHuqaAIV6Fc+Z6h/WbdXw2opdEP3A7GEUQUY6fjYj6AD8Jutn3sz1yd7l5ly+TX6I6YFJ5xHcFcxvl9m/kZIbps+wUjn5mJYZaGcnm2ZYvUD+I0VERLX2yBWg0SWXGuY/Z3mwe4D8nJxZNC4o4g==";String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjedhtEgisXmKUQ9B+P+IldGYB6Qmo8eZi5cZdJzXPDlDMwofCwQqr8+XTjbhhAWMkMdWbR+pewVjAjcelF0apeRyAJlf9rLi0fADc9XdK32fjPXyUKRRyUX5obguTNaC7w3DoQm5MYnxxaWStFisXkyrIKM3E5ibN0ansdCC8+zF5XfdOffEl/5ohgTM79l1e4LRM/O3ei52fs2Ip03coUrnfeWCvzActeLby+z1rFW9BY3u/DkcSlwAOl3XPIg1r9yulXSDm8W49TDvLgnMIEXyVoOgmjckyOl7vKWti9fiDJ+RnARve01EjIpZx5NNM1MuDx/4OkIiNydgTXJZ1wIDAQAB";AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setServerUrl("https://openapi.alipaydev.com/gateway.do");alipayConfig.setAppId("2021000121663960");alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat("json");alipayConfig.setAlipayPublicKey(alipayPublicKey);alipayConfig.setCharset("UTF8");alipayConfig.setSignType("RSA2");AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();AlipayDataDataserviceBillDownloadurlQueryModel model = new AlipayDataDataserviceBillDownloadurlQueryModel();model.setBillType("trade");model.setBillDate("2016-04-05");request.setBizModel(model);AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);System.out.println(response.getBody());if (response.isSuccess()) {System.out.println("调用成功");} else {System.out.println("调用失败");}}
}
package com.alipay.controller;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.resource.AliPayResource;
import com.alipay.utils.DateUtil;
import com.alipay.utils.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** @author: HuGoldWater* @description:*/
@Slf4j
@RestController
@RequestMapping("payment")
public class AlipayController {@Autowiredprivate AliPayResource aliPayResource;/*** 前往支付宝进行支付*/@GetMapping(value="/goAlipay")public JsonResult goAlipay(String merchantUserId, String merchantOrderId) throws Exception{//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(aliPayResource.getGatewayUrl(),aliPayResource.getAppId(),aliPayResource.getMerchantPrivateKey(),"json",aliPayResource.getCharset(),aliPayResource.getAlipayPublicKey(),aliPayResource.getSignType());//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(aliPayResource.getReturnUrl());alipayRequest.setNotifyUrl(aliPayResource.getNotifyUrl());// 商户订单号, 商户网站订单系统中唯一订单号, 必填String out_trade_no = merchantOrderId;// 付款金额, 必填 单位元String total_amount = "0.01";  // 测试用 1分钱// 订单名称, 必填String subject = "胡金水-付款用户[" + merchantUserId + "]";// 商品描述, 可空, 目前先用订单名称String body = subject;// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。String timeout_express = "1h";alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+ "\"total_amount\":\""+ total_amount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\""+ body +"\","+ "\"timeout_express\":\""+ timeout_express +"\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求String alipayForm = "";try {alipayForm = alipayClient.pageExecute(alipayRequest).getBody();} catch (AlipayApiException e) {e.printStackTrace();}log.info("支付宝支付 - 前往支付页面, alipayForm: \n{}", alipayForm);return JsonResult.ok(alipayForm);}/*** 支付成功后的支付宝异步通知*/@RequestMapping(value="/alipay")public String alipay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的支付宝异步通知");//获取支付宝POST过来反馈信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.getParameterMap();for (Iterator<String> 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);}boolean signVerified = AlipaySignature.rsaCheckV1(params,aliPayResource.getAlipayPublicKey(),aliPayResource.getCharset(),aliPayResource.getSignType()); //调用SDK验证签名if(signVerified) {//验证成功// 商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");// 支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");// 付款金额String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");if (trade_status.equals("TRADE_SUCCESS")){//                String merchantReturnUrl = paymentOrderService.updateOrderPaid(out_trade_no, CurrencyUtils.getYuan2Fen(total_amount));
//                notifyFoodieShop(out_trade_no,merchantReturnUrl);}log.info("************* 支付成功(支付宝异步通知) - 时间: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 订单号: {}", out_trade_no);log.info("* 支付宝交易号: {}", trade_no);log.info("* 实付金额: {}", total_amount);log.info("* 交易状态: {}", trade_status);log.info("*****************************************************************************");return "success";}else {//验证失败log.info("验签失败, 时间: {}", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));return "fail";}}}

平台H5对接支付宝支付接口(含分布式源码)相关推荐

  1. PHP版本对接支付宝支付接口 电脑网站 详细介绍 沙箱环境 超简单易懂

    PHP版本对接支付宝支付接口 其实理顺了思路后,按照我接下来的步骤来,真的超级简单啊,为啥有那么多的朋友们折腾了那么久呢,嘿嘿,接下来跟我走吧~ 我是昨天晚上洗完澡之后,大概八九点,才开始正式开工尝试 ...

  2. android支付功能开发,对接支付宝支付接口开发详细步骤

    对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学,一点思路吧. 第一步:(先要在支付宝进行操做 ...

  3. 个人免签支付接口系统搭建源码多种方式

    ## 个人免签支付接口系统搭建源码多种方式 聚合支付源码,多通道轮询,Api自动代付,代理分润 演示地址:http://aa.hocan.cn 一.首先目前的现状是: 支付宝和微信早已不再支持个人接入 ...

  4. 订单支付功能对接支付宝支付接口

    求助:这张GIF的效果动图整了一个多小时,没找到好的编辑软件,都太难用了.如果恰巧看到这篇文章有好的GIF编辑或者录制软件,请推荐一 个!万谢 订单支付功能是购物的最后一个环节,本文将通过对接支付宝的 ...

  5. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo...

    开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...

  6. 支付宝html5接入,app和h5怎样对接支付宝支付接口?

    1.支付宝开放平台https://open.alipay.com 新增应用并签约手机网站支付/APP支付. 2.服务端使用java, 集成支付宝sdk. 3.为方便以后更多支付方式扩展, 先定义接口, ...

  7. TP5 对接支付宝支付接口开发详细步骤(证书签名方式)

    注: 支付宝支付分为支付宝公钥和证书签名方式两种,如果需要使用退款功能要用证书签名方式开发 php接入支付宝证书方式签名 支付宝 PHP SDK 分为老版和新版,老版本的 PHP SDK(v3.4.2 ...

  8. 支付宝支付接口开发———在线扫码支付

    一.所需jar包 服务端sdk下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.470nRM&treeId ...

  9. 对接支付宝支付接口开发详细步骤

    之前做web项目接入支付宝,网上看了很多文档和案列,不是不讲重点就是过时不适用了,导致走了很多弯路,经过冷静分析总算跑通了,这里分享下接入流程. 第一步:(先要在支付宝进行操做,拿到我们需要开发的信息 ...

  10. jsp对接支付宝支付接口,实现网站在线支付(JSP/JAVA WEB/Servlet)

    首先登录 支付宝开放平台 点击立即入驻 打开手机支付宝扫码登录,登录后会提示填写相关信息,填完之后就算入驻成功了. 说明,由于我没有 企业账号,所以以下的操作全在沙箱中进行. 接着,点击开发者中心,选 ...

最新文章

  1. iOS开发UI篇—UITabBarController简单介绍
  2. leetcode算法题--最佳买卖股票时机含冷冻期★
  3. 使用expdp导出时评估所需存储容量大小
  4. 前端学习(2452):封装数据接口
  5. WINDOWS系统自动登录设置
  6. 8.23玩转linux第三天之history、alias、unalias 、mkdir、rmdir、tree命令(一)
  7. 31.URL 管理(2)
  8. MySQL的备份与还原
  9. 浅谈系统如何对接社交登录之微博登录功能
  10. Qt 使用阿里图标库
  11. 小度c1语言控制电视,小度在家1c怎么连接电视机
  12. 山东省教师教育网-学习课程
  13. 比较lowB的Excel初始使用,
  14. VS2017,MFC对WPS下Excel表格的操作
  15. 论文阅读:Attention-based Dropout Layer for Weakly Supervised Object Localization
  16. Ubuntu18.04使用RPLIDAR A2M12雷达出错的解决办法
  17. 大数据分析Python和R语言的优缺点
  18. 3dsmax2022如期上线,什么配置才能流畅使用?
  19. 纯web项目不能使用mui.preload进行页面预加载的解决办法
  20. 2022—SWJTU-寒假ACM校队选拔赛第三场-题解

热门文章

  1. springBoot17_缓存:环境搭建、原理、Cacheable、CachePut、CacheEvit、Caching、阿里云镜像加速、整合redis作为缓存、缓存原理、自定义缓存
  2. 小程序转发功能的实现(页面转发和按钮转发)
  3. 单龙芯3A3000-7A1000PMON研究学习-(4)撸起袖子干-makefile(a)
  4. 双线性函数的紧凑超平面散列(Compact Hyperplane Hashing with Bilinear Functions)阅读笔记
  5. 证件照,手把手教你通过在线工具给所需证件照进行换底色处理
  6. 【模电】0013 反馈放大电路基础
  7. ps怎么对比原图快捷键_PS图片调色常用快捷键,专为新手整理
  8. 苏州企业如何免费办理软件著作权
  9. 【模型理解】KANO模型
  10. 家庭WIFI排障思路