本文共 3573 字,大约阅读时间需要 11 分钟。
【实现过程】
(1)获取参数
由于我这个接口是小程序调取的,获取的参数第一个是从小程序获取的code值,第二个参数是服务传给小程序,然后小程序再传给服务的orderId。
static String wxXcxUrl = "https://api-mop.chinaums.com/v1/netpay/wx/unified-order";
(2)获取OpenId
通过code值获取到OpenId。
@Service@AllArgsConstructorpublic class WxXcxServiceImpl implements WxXcxService { private static final Logger log = LoggerFactory.getLogger(WxXcxServiceImpl.class); @Override public String getOpenId(String code) throws Exception { log.debug("通过code值获取到OpenId"); Map rtnMap = new HashMap<>(); String url = "https://api.weixin.qq.com/sns/jscode2session"; url += "?appid=" + getAppId(); url += "&secret=" + getSecret(); url += "&js_code=" + code; url += "&grant_type=authorization_code"; CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = null; RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000) .setConnectionRequestTimeout(5000) .setSocketTimeout(5000) .setRedirectsEnabled(false) .build(); httpGet.setConfig(requestConfig); response = httpClient.execute(httpGet); HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { String res = EntityUtils.toString(responseEntity); log.debug("响应内容为: {}", res); JSONObject jo = JSON.parseObject(res); String openid = jo.getString("openid"); log.debug("openid: {}", openid); return openid; } throw new RuntimeException("获取OpenId失败"); }} (3)银联的鉴权
@Service @AllArgsConstructorpublic class AppXiaDanServiceImpl implements AppXiaDanService { private static final String appId = ""; private static final String appKey = ""; private static String authorization; @Override public String send(String url, String entity) throws Exception { authorization = getOpenBodySig(appId, appKey, entity); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Authorization", authorization); StringEntity se = new StringEntity(entity, "UTF-8"); se.setContentType("application/json"); httpPost.setEntity(se); CloseableHttpResponse response = httpClient.execute(httpPost); HttpEntity entity1 = response.getEntity(); String resStr = null; if (entity1 != null) { resStr = EntityUtils.toString(entity1, "UTF-8"); } httpClient.close(); response.close(); return resStr; } private static String getOpenBodySig(String appId, String appKey, String body) throws Exception { String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); String nonce = UUID.randomUUID().toString().replace("-", ""); byte[] data = body.getBytes("UTF-8"); byte[] localSignature = hmacSHA256(data, appKey.getBytes()); String st1_C = appId + timestamp + nonce + bytesToHex(localSignature); return "OPEN-BODY-SIG AppId=" + "\"" + appId + "\"" + ", Timestamp=" + "\"" + timestamp + "\", Nonce=" + "\"" + nonce + "\", Signature=" + "\"" + st1_C + "\""; } private static byte[] hmacSHA256(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeyException { Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(key, "HmacSHA256")); return mac.doFinal(data); }} 【测试返回】
测试结果:
转载地址:http://hphe.baihongyu.com/