wechatpay-apache-httpclient完全指南10分钟上手微信支付APIv3开发【免费下载链接】wechatpay-apache-httpclient微信支付 APIv3 Apache HttpClient装饰器decorator项目地址: https://gitcode.com/gh_mirrors/we/wechatpay-apache-httpclientwechatpay-apache-httpclient是微信支付APIv3的Apache HttpClient扩展实现了请求签名的生成和应答签名的验证。如果你是使用Apache HttpClient的商户开发者可以使用它构造HttpClient自动携带身份认证信息并检查应答的微信支付签名快速实现微信支付功能。 准备工作环境与依赖环境要求Java 1.8快速安装最新版本已在Maven Central发布你可以通过以下方式引入依赖Gradle在build.gradle文件中加入implementation com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.5.0Maven在pom.xml中加入dependency groupIdcom.github.wechatpay-apiv3/groupId artifactIdwechatpay-apache-httpclient/artifactId version0.5.0/version /dependency 核心概念关键名词解释在开始开发前需要了解以下核心概念商户API证书证实商户身份包含商户号、证书序列号等信息由CA签发。商户API私钥申请商户API证书时生成保存在本地apiclient_key.pem文件中需妥善保管。微信支付平台证书微信支付提供的包含公钥信息的证书用于验证应答签名。证书序列号CA颁发的证书唯一编号。API v3密钥用于AES-256-GCM加密的对称密钥在商户平台设置。 快速上手3步构建HttpClient第1步获取必要参数准备以下参数merchantId商户号merchantSerialNumber商户API证书序列号merchantPrivateKey商户API私钥可通过PemUtil.loadPrivateKey()加载wechatPayCertificates微信支付平台证书列表或使用定时更新功能第2步构建WechatPayHttpClient使用WechatPayHttpClientBuilder替换原生HttpClientBuilderimport com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; // 构建HttpClient WechatPayHttpClientBuilder builder WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withWechatPay(wechatPayCertificates); // 可继续设置其他参数如超时时间、连接池等 CloseableHttpClient httpClient builder.build();第3步发送支付请求使用构建好的httpClient发送请求自动处理签名和验签// 示例JSAPI下单 HttpPost httpPost new HttpPost(https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi); httpPost.addHeader(Accept, application/json); httpPost.addHeader(Content-type, application/json; charsetutf-8); // 构造请求体使用Jackson示例 ObjectMapper objectMapper new ObjectMapper(); ObjectNode rootNode objectMapper.createObjectNode(); rootNode.put(mchid, 1900009191) .put(appid, wxd678efh567hg6787) .put(description, Image形象店-深圳腾大-QQ公仔) .put(notify_url, https://www.weixin.qq.com/wxpay/pay.php) .put(out_trade_no, 1217752501201407033233368018); rootNode.putObject(amount).put(total, 1); rootNode.putObject(payer).put(openid, oUpF8uMuAJO_M2pxb1Q9zNjWeS6o); httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(rootNode), UTF-8)); // 发送请求并获取响应 CloseableHttpResponse response httpClient.execute(httpPost); String bodyAsString EntityUtils.toString(response.getEntity()); System.out.println(bodyAsString);⚡ 高级功能提升开发效率定时更新平台证书版本≥0.4.0支持自动更新平台证书无需手动维护// 获取证书管理器实例 CertificatesManager certificatesManager CertificatesManager.getInstance(); // 添加商户信息 certificatesManager.putMerchant(merchantId, new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8)); // 获取自动更新的验签器 Verifier verifier certificatesManager.getVerifier(merchantId); // 构建HttpClient时使用该验签器 WechatPayHttpClientBuilder builder WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withValidator(new WechatPay2Validator(verifier));回调通知处理版本≥0.4.2提供NotificationHandler处理回调通知的验签与解密// 构建回调请求 NotificationRequest request new NotificationRequest.Builder() .withSerialNumber(wechatPaySerial) .withNonce(nonce) .withTimestamp(timestamp) .withSignature(signature) .withBody(body) .build(); // 处理回调 NotificationHandler handler new NotificationHandler(verifier, apiV3Key.getBytes(StandardCharsets.UTF_8)); Notification notification handler.parse(request); System.out.println(解密后数据 notification.getDecryptData());图片/视频上传使用WechatPayUploadHttpPost简化媒体文件上传String filePath /your/home/hellokitty.png; URI uri new URI(https://api.mch.weixin.qq.com/v3/merchant/media/upload); File file new File(filePath); try (FileInputStream ins1 new FileInputStream(file)) { String sha256 DigestUtils.sha256Hex(ins1); try (InputStream ins2 new FileInputStream(file)) { HttpPost request new WechatPayUploadHttpPost.Builder(uri) .withImage(file.getName(), sha256, ins2) .build(); CloseableHttpResponse response httpClient.execute(request); } }❓ 常见问题解决如何加载商户私钥使用PemUtil.loadPrivateKey()方法// 从文件加载 PrivateKey merchantPrivateKey PemUtil.loadPrivateKey(new FileInputStream(/path/to/apiclient_key.pem)); // 从字符串加载 PrivateKey merchantPrivateKey PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes(utf-8)));如何下载平台证书首次使用时可临时跳过验签下载证书CloseableHttpClient httpClient WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withValidator(response - true) // 仅用于首次下载证书业务请求需验证签名 .build();依赖冲突解决若出现JacksonNoSuchMethodError可引入Jackson BOM统一版本// Gradle implementation(platform(com.fasterxml.jackson:jackson-bom:2.13.2.20220328))!-- Maven -- parent groupIdcom.fasterxml.jackson/groupId artifactIdjackson-bom/artifactId version2.13.2.20220328/version /parent 更多资源完整示例代码AutoUpdateVerifierTest.uploadImageTest回调处理示例NotificationHandlerTest升级指南UPGRADING.md通过wechatpay-apache-httpclient开发者可以快速集成微信支付APIv3减少签名验签等繁琐工作专注于业务逻辑开发。立即尝试10分钟开启微信支付开发之旅【免费下载链接】wechatpay-apache-httpclient微信支付 APIv3 Apache HttpClient装饰器decorator项目地址: https://gitcode.com/gh_mirrors/we/wechatpay-apache-httpclient创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
wechatpay-apache-httpclient完全指南:10分钟上手微信支付APIv3开发
wechatpay-apache-httpclient完全指南10分钟上手微信支付APIv3开发【免费下载链接】wechatpay-apache-httpclient微信支付 APIv3 Apache HttpClient装饰器decorator项目地址: https://gitcode.com/gh_mirrors/we/wechatpay-apache-httpclientwechatpay-apache-httpclient是微信支付APIv3的Apache HttpClient扩展实现了请求签名的生成和应答签名的验证。如果你是使用Apache HttpClient的商户开发者可以使用它构造HttpClient自动携带身份认证信息并检查应答的微信支付签名快速实现微信支付功能。 准备工作环境与依赖环境要求Java 1.8快速安装最新版本已在Maven Central发布你可以通过以下方式引入依赖Gradle在build.gradle文件中加入implementation com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.5.0Maven在pom.xml中加入dependency groupIdcom.github.wechatpay-apiv3/groupId artifactIdwechatpay-apache-httpclient/artifactId version0.5.0/version /dependency 核心概念关键名词解释在开始开发前需要了解以下核心概念商户API证书证实商户身份包含商户号、证书序列号等信息由CA签发。商户API私钥申请商户API证书时生成保存在本地apiclient_key.pem文件中需妥善保管。微信支付平台证书微信支付提供的包含公钥信息的证书用于验证应答签名。证书序列号CA颁发的证书唯一编号。API v3密钥用于AES-256-GCM加密的对称密钥在商户平台设置。 快速上手3步构建HttpClient第1步获取必要参数准备以下参数merchantId商户号merchantSerialNumber商户API证书序列号merchantPrivateKey商户API私钥可通过PemUtil.loadPrivateKey()加载wechatPayCertificates微信支付平台证书列表或使用定时更新功能第2步构建WechatPayHttpClient使用WechatPayHttpClientBuilder替换原生HttpClientBuilderimport com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; // 构建HttpClient WechatPayHttpClientBuilder builder WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withWechatPay(wechatPayCertificates); // 可继续设置其他参数如超时时间、连接池等 CloseableHttpClient httpClient builder.build();第3步发送支付请求使用构建好的httpClient发送请求自动处理签名和验签// 示例JSAPI下单 HttpPost httpPost new HttpPost(https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi); httpPost.addHeader(Accept, application/json); httpPost.addHeader(Content-type, application/json; charsetutf-8); // 构造请求体使用Jackson示例 ObjectMapper objectMapper new ObjectMapper(); ObjectNode rootNode objectMapper.createObjectNode(); rootNode.put(mchid, 1900009191) .put(appid, wxd678efh567hg6787) .put(description, Image形象店-深圳腾大-QQ公仔) .put(notify_url, https://www.weixin.qq.com/wxpay/pay.php) .put(out_trade_no, 1217752501201407033233368018); rootNode.putObject(amount).put(total, 1); rootNode.putObject(payer).put(openid, oUpF8uMuAJO_M2pxb1Q9zNjWeS6o); httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(rootNode), UTF-8)); // 发送请求并获取响应 CloseableHttpResponse response httpClient.execute(httpPost); String bodyAsString EntityUtils.toString(response.getEntity()); System.out.println(bodyAsString);⚡ 高级功能提升开发效率定时更新平台证书版本≥0.4.0支持自动更新平台证书无需手动维护// 获取证书管理器实例 CertificatesManager certificatesManager CertificatesManager.getInstance(); // 添加商户信息 certificatesManager.putMerchant(merchantId, new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8)); // 获取自动更新的验签器 Verifier verifier certificatesManager.getVerifier(merchantId); // 构建HttpClient时使用该验签器 WechatPayHttpClientBuilder builder WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withValidator(new WechatPay2Validator(verifier));回调通知处理版本≥0.4.2提供NotificationHandler处理回调通知的验签与解密// 构建回调请求 NotificationRequest request new NotificationRequest.Builder() .withSerialNumber(wechatPaySerial) .withNonce(nonce) .withTimestamp(timestamp) .withSignature(signature) .withBody(body) .build(); // 处理回调 NotificationHandler handler new NotificationHandler(verifier, apiV3Key.getBytes(StandardCharsets.UTF_8)); Notification notification handler.parse(request); System.out.println(解密后数据 notification.getDecryptData());图片/视频上传使用WechatPayUploadHttpPost简化媒体文件上传String filePath /your/home/hellokitty.png; URI uri new URI(https://api.mch.weixin.qq.com/v3/merchant/media/upload); File file new File(filePath); try (FileInputStream ins1 new FileInputStream(file)) { String sha256 DigestUtils.sha256Hex(ins1); try (InputStream ins2 new FileInputStream(file)) { HttpPost request new WechatPayUploadHttpPost.Builder(uri) .withImage(file.getName(), sha256, ins2) .build(); CloseableHttpResponse response httpClient.execute(request); } }❓ 常见问题解决如何加载商户私钥使用PemUtil.loadPrivateKey()方法// 从文件加载 PrivateKey merchantPrivateKey PemUtil.loadPrivateKey(new FileInputStream(/path/to/apiclient_key.pem)); // 从字符串加载 PrivateKey merchantPrivateKey PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes(utf-8)));如何下载平台证书首次使用时可临时跳过验签下载证书CloseableHttpClient httpClient WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withValidator(response - true) // 仅用于首次下载证书业务请求需验证签名 .build();依赖冲突解决若出现JacksonNoSuchMethodError可引入Jackson BOM统一版本// Gradle implementation(platform(com.fasterxml.jackson:jackson-bom:2.13.2.20220328))!-- Maven -- parent groupIdcom.fasterxml.jackson/groupId artifactIdjackson-bom/artifactId version2.13.2.20220328/version /parent 更多资源完整示例代码AutoUpdateVerifierTest.uploadImageTest回调处理示例NotificationHandlerTest升级指南UPGRADING.md通过wechatpay-apache-httpclient开发者可以快速集成微信支付APIv3减少签名验签等繁琐工作专注于业务逻辑开发。立即尝试10分钟开启微信支付开发之旅【免费下载链接】wechatpay-apache-httpclient微信支付 APIv3 Apache HttpClient装饰器decorator项目地址: https://gitcode.com/gh_mirrors/we/wechatpay-apache-httpclient创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考