为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,我们推出了全新的微信支付APIv3接口。该版本API的具体规则请参考“APIv3接口规则”
为了帮助开发者调用开放接口,我们提供了JAVA、PHP、GO三种语言版本的开发库,封装了签名生成、签名验证、敏感信息加/解密、媒体文件上传等基础功能(更多语言版本的开发库将在近期陆续提供)
测试步骤:
1、根据自身开发语言,选择对应的开发库并构建项目,具体配置请参考下面链接的详细说明:
• wechatpay-java(推荐)wechatpay-apache-httpclient,适用于Java开发者。
• wechatpay-php(推荐)、wechatpay-guzzle-middleware,适用于PHP开发者
注:当前开发指引接口PHP示例代码采用wechatpay-guzzle-middleware版本
• wechatpay-go,适用于Go开发者
更多资源可前往微信支付开发者社区搜索查看
2、创建加载商户私钥、加载平台证书、初始化httpClient的通用方法
@Before
public void setup() throws IOException {
// 加载商户私钥(privateKey:私钥字符串)
PrivateKey merchantPrivateKey = PemUtil
.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
// 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));
// 初始化httpClient
httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(mchId, mchSerialNo, merchantPrivateKey)
.withValidator(new WechatPay2Validator(verifier)).build();
}
@After
public void after() throws IOException {
httpClient.close();
}
3、基于接口的示例代码,替换请求参数后可发起测试
说明:
• 上面的开发库为微信支付官方开发库,其它没有审核或者控制下的第三方工具和库,微信支付不保证它们的安全性和可靠性
通过包管理工具引入SDK后,可根据下面每个接口的示例代码替换相关参数后进行快速测试
• 开发者如果想详细了解签名生成、签名验证、敏感信息加/解密、媒体文件上传等常用方法的具体代码实现,可阅读下面的详细说明:
1.签名生成
2.签名验证
3.敏感信息加解密
• 如想更详细的了解我们的接口规则,可查看我们的接口规则指引文档
文档展示了如何使用微信支付服务端 SDK 快速接入智慧商圈产品,完成与微信支付对接的部分。
注意:
微信支付智慧商圈,需先接入商圈快速积分小程序插件。小程序插件可参考:小程序插件开发文档
步骤说明:当用户完成支付,微信会把相关支付结果将通过异步回调的方式通知商户,商户需要接收处理,并按文档规范返回应答。
注意:
更多参数、响应详情及错误码请参见 商圈支付结果通知API接口文档
步骤说明:商圈服务商针对微信支付前序推送给商圈系统的顾客商圈内交易通知,告知微信支付系统该笔交易的积分情况
示例代码
public void SyncPoints() throws Exception{
//请求URL
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/businesscircle/points/notify");
// 请求body参数
String reqdata = "{"
+ "\"sub_mchid\":\"1234567890\","
+ "\"transaction_id\":\"4200000533202000000000000000\","
+ "\"appid\":\"wx8828b70xxxxxxx8\","
+ "\"openid\":\"otPAN5xxxxxxxxrOEG6lUv_pzacc\","
+ "\"earn_points\":true,"
+ "\"increased_points\":100,"
+ "\"points_update_time\":\"2020-05-20T13:29:35.120+08:00\","
+ "\"total_points\":888888"
+ "}";
StringEntity entity = new StringEntity(reqdata,"utf-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Accept", "application/json");
//完成签名并执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { //处理成功
System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
} else if (statusCode == 204) { //处理成功,无返回Body
System.out.println("success");
} else {
System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
throw new IOException("request failed");
}
} finally {
response.close();
}
}
重要入参说明:
• transaction_id:微信支付推送的商圈内交易通知里携带的微信订单号
• earn_points:用于标明此单是否获得积分,true为获得积分,false为未获得
• increased_points:顾客此笔交易新增的积分值
更多参数、响应详情及错误码请参见商圈积分同步接口文档
A:可以。 若一个商圈拥有多个小程序,且在多个小程序场景里都适合引导会员开通【智慧商圈支付即积分】能力,请在提交支付即积分申请时,提交对应的多个小程序的APPID,目前最多支持5个。
A:建议使用微信支付会员卡能力,来提升会员开卡的体验,但是若未使用微信支付会员卡能力,一样可以使用【智慧商圈支付即积分】能力。
【智慧商圈支付即积分】能力的实现非常灵活,使用插件形式,嵌入商圈自有小程序中,由商圈自行进行会员身份判断,若判断是会员则可进入“商圈快速积分插件”,引导用户开通【智慧商圈支付即积分】能力。
A:该问题可通过商圈自行解决,登录商圈小程序后台,更新插件版本。
A:该问题可通过商圈自行解决:
1. 确认是服务商模式还是商圈直连模式(登录商户平台确认证书配置):
a)若是服务商模式,则需要为服务商商户号配置API-V3证书
b)若是商圈直连模式,则需要为商圈商户号配置API-V3证书
A:该问题可以通过商圈自检解决。
【用户插件页检查】
1. 用户通过小程序进入插件页面,查看是否有交易但未提交,若有,则证明提前未签到,直接点击提交即可获取积分(注:插件页只能展示当天的场内消费信息,通过交易单号可识别是否为当天交易)
【若用户插件页无交易-商圈可积分门店检查】
1. 该门店未添加进商圈内(可能原门店的商户号变更),自检方式:使用用户交易单号在小程序添加该门店,查看是否可添加,并且该门店已开启“支持积分”(若用户消费前,该门店未被圈入商圈,则该笔交易订单不会自动推送,用户可在商圈圈店后进入插件页手动推送)
2. 用户未在门店消费