使用场景:项目中的订单支付,调用银联云闪付进行支付的场景。
前提条件:需要已经在银联注册过商户,注册后银联会提供给商户号(mid)、终端号(tid)、开发者ID(appid)、开发者秘钥(appKey)等参数。
ContentType:HTTP(S)
请求头
Authorization 认证内容
获取请求头(Token)方式
//实例化客户端
ConfigBean configBean = new ConfigBean();
OpenApiContext context = new OpenApiContext();
String request = "{\"msgId\":\""+msgId+"\",";//消息ID 其他参数省略
//其他参数省略
context.setStartTime(System.currentTimeMillis());
context.setRequestId(UUID.randomUUID().toString().replace("-", ""));
context.setOpenServUrl(URL.split("/v")[0].concat("/"));
context.setApiServiceUrl(URL);
context.setVersion(URL.split("/")[3]);
context.setAppId(APPID);
context.setAppKey(APPKEY);
context.setConfigBean(configBean);
context.setServiceCode(URL.split("/v")[1].substring(1));
OpenApiCache.getCurrentToken(context);
HttpTransport.getInstance().doPost(context, request);
这是官方提供的sdk,包含的token获取,也做了缓存
package com.demo.chinaums.sdk;
import com.demo.chinaums.sdk.internal.util.OpenTokenUtil;
import com.demo.chinaums.sdk.response.TokenResponse;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.concurrent.TimeUnit;
public class OpenApiCache {
public final static int MAX_PROCESS_TIMEOUT = 3600;
public static Cache<String, Object> contextCache = CacheBuilder.newBuilder()
.expireAfterWrite(MAX_PROCESS_TIMEOUT, TimeUnit.SECONDS).build();
/**
* 获取当前有效的token
* @param context
* @return
*/
public static TokenResponse getCurrentToken(OpenApiContext context){
String appId = context.getAppId();
TokenResponse token = (TokenResponse)contextCache.getIfPresent(appId);
if(token==null){
token = OpenTokenUtil.getToken(context);
contextCache.put(context.getAppId(), token);
}
context.setCurrentToken(token);
return token;
}
}
开发者中心提供了详细的demo和api说明,也提供了SDK
地址参考:
下单
C扫B支付(主扫)
银联商务小程序支付 云闪付下单
退款
C扫B支付(主扫)
银联商务小程序支付
退款查询
C扫B支付(主扫)
退款接口返回,没有单独的查询退款结果或退款通知接口
银联商务小程序支付
支付结果通知
C扫B支付(主扫)
银联商务小程序支付
SDK下载
接口如果返回类似无权限之类的提示的话,需要找到商务申请权限。
"errMsg":"无此交易权限"
"errMsg":"无退款权限"