上班一直用到微信 银联调用支付接口的问题 写了一个方法 在此做下记录
package com.zte.xh.micromall.core.utils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import net.sf.json.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
public class MicroWeichatUtils {
/**
*
* @param url
* 地址
* @param params
* 返回的结果中需要哪些返回值,不加密的https调用
* @param resultType
* response响应的结果是什么类型的,一般是json或者xml
* @return 其实这里还需要加一个http请求类型的参数,来判断是http请求还是https的请求,目前微信都是https的 所以没添加
*/
public static Map<String, String> getParam(String url, String resultType,
String... params) {
try {
URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console
.openConnection();
conn.setRequestMethod("GET");// get方式提交
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setInstanceFollowRedirects(true);
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "UTF-8"));
String line;
StringBuffer responseText = new StringBuffer();
while ((line = reader.readLine()) != null) {
responseText.append(line).append("\r\n");
}
reader.close();
conn.disconnect();
// System.out.println("响应结果responseText--------------"
// + responseText.toString());
String result = responseText.toString();
Map<String, String> resultM = new HashMap<String, String>();
if (StringUtils.isNotEmpty(result)) {
// 解析获取到的json
JSONObject jsonObject = JSONObject.fromObject(result);
for (String param : params) {
resultM.put(param, jsonObject.getString(param));
// System.out.println(param + "--------"
// + jsonObject.getString(param));
}
}
return resultM;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 字典排序
*
* @param hm
* @param kl
* @param key
* @return
*/
public static String getSign(Map<String, String> hm, List<String> kl) {
// 排序
String[] kls = kl.toArray(new String[] {});
Arrays.sort(kls);
// 拼接处待加密的String
StringBuffer sb = new StringBuffer();
for (String k : kls) {
sb.append(k);
sb.append("=");
sb.append(hm.get(k));
sb.append("&");
}
String stringSignTemp = sb.toString();
// 去掉最后的一个&
stringSignTemp = stringSignTemp.substring(0,
stringSignTemp.length() - 1);
// System.out.println("字典排序后-------" + stringSignTemp);
// 进行sha1加密
String asignature = DigestUtils.shaHex(stringSignTemp);
// System.out.println("加密后的signature---" + asignature);
return asignature;
}
// 这是需要加密文件的方法,XML表示传递的参数为xml类型的字符串,通过httpclient来实现的
private String addMenu(String URL, String XML, String mch_id)
throws Exception {
//有的需要的代理
//System.setProperty("proxyHost", "");
//System.setProperty("proxyPort", "80");
//System.setProperty("proxyUser", "");
//System.setProperty("proxyPassword", "!");
String result = null;
KeyStore keyStore = KeyStore.getInstance("PKCS12");
// 读取配置文件的路劲
Map params = this.paymentManager.getConfigParams(this.getId());
String merPath = (String) params.get("merPath");
FileInputStream instream = new FileInputStream(new File(merPath));
try {
keyStore.load(instream, mch_id.toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, mch_id.toCharArray()).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext, new String[] { "TLSv1" }, null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf).build();
try {
HttpPost httppost = new HttpPost(URL);
StringEntity entity = new StringEntity(XML.toString(), "utf-8");
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity);
}
} finally {
httpclient.close();
}
return result;
}
public static void main(String[] args) {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+ appid + "&secret=" + secret;
Map<String, String> tokenMap = MicroWeichatUtils.getParam(url,
"json", "access_token");
if (tokenMap != null
&& StringUtils.isNotEmpty(tokenMap.get("access_token"))) {
String accessToken = tokenMap.get("access_token");
// 获取ticket
url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
+ accessToken + "&type=jsapi";
// 自定义调用微信接口方法
Map<String, String> ticketMap = MicroWeichatUtils.getParam(
url, "json", "ticket");
String ticket = ticketMap.get("ticket");
WxConstant.setWxAccessToken(accessToken);
WxConstant.setWxTicket(ticket);
}
}
}
分享到:
相关推荐
以上就是关于"微信支付java后台代码"项目的主要知识点,涵盖了微信支付的API使用、Java SDK的集成、项目结构以及支付流程等核心内容。在实际使用中,开发者需要根据自己的业务需求进行适当的调整和配置。
6. **前端调用支付**: 前端(通常是JavaScript)接收到PHP后端传递的支付参数后,通过微信JSSDK调起微信支付。用户确认支付后,微信会跳转到商户设定的回调URL,告知支付状态。 7. **支付结果通知**: 商户...
总的来说,微信支付的实现涉及前后端的紧密配合,后台负责订单创建、接收并处理支付结果,前端则展示支付界面并调起支付流程。通过提供的代码和工具,开发者可以快速集成微信支付功能,为用户提供便捷的支付体验。在...
在这个项目中,我们结合了微信小程序和Java后台技术,实现了一个完整的微信支付流程。以下将详细阐述涉及的知识点: 1. **微信小程序**:微信小程序是一种轻量级的应用开发框架,允许开发者在微信内部创建和运行...
11. **H5支付页面**:H5支付页面是用户看到并进行支付操作的界面,这个页面需要调用微信支付SDK生成支付二维码或直接调起微信支付,用户扫描或点击后开始支付流程。 12. **log文件**:日志文件对于调试和问题排查至...
4. **发起JSAPI支付**:对于小程序内支付,你需要在前端获取用户的OpenID(通过wx.login接口获取),然后结合prepay_id、商户号等信息,调用统一下单接口返回的统一下单结果,生成签名并发起JSAPI支付请求。...
综上所述,"支付宝支付-APP支付后台java代码下载"涉及的主要知识点包括:支付宝SDK集成、支付接口调用、签名算法、客户端处理、支付结果回调、安全与异常处理以及测试与上线流程。开发者需熟练掌握这些技术要点,以...
2. **后台代码**:这部分内容通常包括服务器端的逻辑处理,例如用户登录注册、商品管理、订单处理、支付接口对接等。它可能是用Java、Python、Node.js等后端语言编写,配合数据库(如MySQL、MongoDB)进行数据存储和...
2. **生成预支付交易单**:在服务器端,Java代码会根据订单详情(商品信息、金额、用户openid等)调用微信API生成预支付交易单,返回的预支付交易会话标识(prepay_id)是后续JS调用的关键。 3. **前端JS调用**:...
这套源代码是学习和实践微信小程序全栈开发的好素材,涵盖了前后端的完整流程,有助于开发者深入理解微信小程序的工作原理,提升开发技能。通过研究源代码,可以了解实际项目的开发模式,为自己的小程序项目提供参考...
同时,持续集成/持续部署(CI/CD)工具如Jenkins或Azure DevOps可以帮助自动化构建和发布流程,确保代码质量和版本控制。 总的来说,教育网站后台管理系统源代码的学习和分析涵盖了Web开发的多个方面,包括前端界面...
在这个后台代码中,我们可以预期看到微信支付API的调用,包括初始化支付、生成预支付交易单、调用微信统一下单接口等关键操作,以及MD5和SHA1加密算法的实现。 开发微信支付功能时,开发者需要遵循微信官方的SDK...
后台开发包是银联为了方便开发者集成其支付服务而提供的工具集,它包含了必要的API接口、示例代码(demo)、开发文档等资源,帮助开发者快速理解和实现银联支付的接入。 首先,"后台开发包"通常包括以下组件: 1. ...
在这个页面中,用户点击支付按钮后,会触发支付流程,与后台服务器交互,获取预支付交易信息,并启动微信支付的H5页面。 - `notice.html`:可能是一个支付成功或者失败后的通知页面,用于向用户展示支付状态,如...
【MyKTV后台应用代码】是一个关于开发MyKTV后台系统的资源包,包含了必要的素材和源码文件。这个系统可能是为了支持卡拉OK娱乐场所的运营管理而设计的,它可能涵盖了预订管理、房间管理、歌曲库管理、用户管理、订单...
6. 最后,整个支付流程应符合微信和支付宝的支付规范,通过对接口的规范调用,确保支付过程的安全性和可靠性。开发人员需不断测试支付流程,确保在各种可能的场景下支付都能正常运行。 综上所述,PHP后台开发人员在...
- 通过在本地或测试环境中运行代码,可以验证支付、退款和对账流程是否正常工作。在实际应用前,务必在翼支付提供的沙箱环境中进行充分的测试。 6. **安全与合规**: - 翼支付强调安全性和合规性,开发者在使用...
微信支付后端DEMO(Java)是用于演示微信支付功能的一个示例项目,结合了微信小程序的JS代码、前端H5页面源码以及后台源码,帮助开发者快速理解和实现微信支付流程。在这个压缩包文件中,`WechatPayDemo-master` 是...
为了确保支付结果的准确性,除了等待微信的异步通知,还可以主动调用支付结果查询接口,获取订单的最新状态。 6. **退款接口**: 如果需要退款,Java代码中需要调用退款接口,提交退款申请。同样,也需要处理退款...
7. **日志记录**:为了便于后期问题排查和数据分析,后台系统应记录详尽的支付日志,包括请求参数、响应结果、异常信息等,这对于维护和优化支付流程至关重要。 8. **扩展性**:虽然这个后台版本没有退款功能,但...