简单的微信支付

微信支付参数用的是一个Map,类似于request.getParameterMap,得到的Map,封装了页面传入的值


public WeChatModel weChatPay(PageData pd) {

//定义了当前时间,Dome中的,项目中没有用到
Date now = new Date();

//拿到Map中当前用户的ID
String user_id = pd.getString("doctorId");

//定义了随机字符串,当前项目中没有用到
String orderid = UuidUtil.get32UUID();

//该笔交易的唯一订单号,该方法是定义了当前时间戳
String out_trade_no = OrderNoUtil.getOrderNo();//订单号

//拿到发起请求客户端的IP地址
/*String attach=user_id+","+orderid;*/
String spbill_create_ip=pd.getString("spbill_create_ip");

/拿到该笔交易的价格,为支付宝不同的是,微信的金额是以分为单位计算的
String total_fee = pd.getString("price");

//定义微信支付对象,该对象的属性就是微信的配置,商户号,APPid,密钥等
WXMyConfigUtil config = new WXMyConfigUtil();
System.err.println(spbill_create_ip);

try {
//提交订单方法
//这里的最后一个参数type设置的为1,具体不明
Map<String, String> result = this.dounifiedOrder(user_id, out_trade_no, total_fee, spbill_create_ip, 1);

String nonce_str = (String) result.get("nonce_str");
String prepay_id = (String) result.get("prepay_id");
Long time = System.currentTimeMillis() / 1000;
String timestamp = time.toString();

// 签名生成算法
MD5Util md5Util = new MD5Util();
Map<String, String> map = new HashMap<>();
map.put("appid", config.getAppID());
map.put("partnerid", config.getMchID());
map.put("package", "Sign=WXPay");
map.put("noncestr", nonce_str);
map.put("timestamp", timestamp);
map.put("prepayid", prepay_id);
String sign = md5Util.getSign(map);

//因为是接口业务,所以要给前段返回数据,
//创建一个自定义对象,
WeChatModel weChatModel = new WeChatModel();

//微信的APPID
weChatModel.setAppid(config.getAppID());
//微信的商户id
weChatModel.setPartnerid(config.getMchID());
//设置常量值,具体不明
weChatModel.setPackages("Sign=WXPay");
//提交订单返回的信息
weChatModel.setNoncestr(nonce_str);
//当前时间戳相关
weChatModel.setTimestamp(timestamp);
//提交订单返回的信息
weChatModel.setPrepayid(prepay_id);
//设置签名信息
weChatModel.setSign(sign);
return weChatModel;
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
e.printStackTrace();
return null;
}
}


微信支付提交订单的方法
public Map<String,String> dounifiedOrder(String attach, String out_trade_no, String total_fee,
String spbill_create_ip, int type) throws Exception{

Map<String, String> fail = new HashMap<>();
//创建微信支付对象,对象属性就是微信的具体配置
WXMyConfigUtil config = new WXMyConfigUtil();
//微信支付对象官方,需引入
WXPay wxpay = new WXPay(config);

Map<String, String> data = new HashMap<String, String>();

// 异步通知地址(请注意必须是外网)
//配置支付回调函数
data.put("notify_url", textConfig.getPath() + "/api/purse/pay/notifyWeChatPay");
// data.put("notify_url", textConfig.getPath() + "/api/master/notify");
//设置支付信息
data.put("body", "钱包充值");
//设置该笔交易唯一订单号
data.put("out_trade_no", out_trade_no);
//设置该笔交易价格
data.put("total_fee", total_fee);
//设置客户端ip
data.put("spbill_create_ip", spbill_create_ip);
//设置常量值
data.put("trade_type", "APP");
//申请人的ID
data.put("attach", attach);
StringBuffer url = new StringBuffer();

try {
//微信发起提交
Map<String, String> resp = wxpay.unifiedOrder(sortMapByKey(data));
System.out.println(resp);
System.out.println("--------------"+total_fee);
String returnCode = resp.get("return_code"); // 获取返回码
String returnMsg = resp.get("return_msg");
if ("SUCCESS".equals(returnCode)) { // 若返回码为SUCCESS,则会返回一个result_code,再对该result_code进行判断
String resultCode = (String) resp.get("result_code");
String errCodeDes = (String) resp.get("err_code_des");
System.out.print(errCodeDes);
if ("SUCCESS".equals(resultCode)) {
// 获取预支付交易回话标志
Map<String, String> map = new HashMap<>();
String prepay_id = resp.get("prepay_id");
String signType = "MD5";
map.put("signType", signType);
map.put("prepay_id", prepay_id);
String sign = MD5Util.getSign(map);
resp.put("realsign", sign);
url.append("prepay_id=" + prepay_id + "&signType=" + signType + "&sign=" + sign);
return resp;
} else {
url.append(errCodeDes);
}
} else {
url.append(returnMsg);
}
}  catch (Exception e) {
logger.error(e.getMessage());
System.out.println("aaaaaaaaaaaaa");
System.out.println(e);
/* logger.info(e.getMessage()); */
}
return fail;
}


// map 的key值根据字母排序

public static Map<String, String> sortMapByKey(Map<String, String> map) {
if (map == null || map.isEmpty()) {
return null;
}
Map<String, String> sortMap = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String obj1, String obj2) {
return obj1.compareTo(obj2);
}
});
sortMap.putAll(map);
return sortMap;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi7是一种编程语言和集成开发环境(IDE),可以用于创建Windows应用程序。而微信支付支付支付是两种目前非常流行的移动支付方式。 要在Delphi7中实现微信支付支付支付,可以借助第三方库或组件来实现。目前有一些开源的Delphi组件库已经支持了微信支付支付支付的集成: 1. weiXinPayDelphi:这是一个开源的Delphi组件,通过调用微信支付的API实现支付功能。它提供了简单易用的接口,并支持集成微信支付的各种功能,例如发起支付请求、验证支付结果等。 2. AlipaySDK4Delphi:这是一个开源的Delphi组件,通过调用支付支付的接口实现支付功能。它提供了与支付支付交互所需的各种功能和接口,例如扫码支付、手机网页支付等。 您可以在Delphi7的开发环境中安装这些组件,并按照组件的文档和示例代码来进行微信支付支付支付的集成工作。在使用这些组件时,您需要获取到微信支付支付支付的商户号、密钥等信息,并按照其规定的流程来完成支付请求和支付结果的处理。 需要注意的是,由于Delphi7是一个相对较旧的版本,可能对于某些最新的支付功能和接口存在一定的限制。因此,在选择第三方组件时,需要确保其与Delphi7版本的兼容性,并且可以满足您的支付需求。 总之,要在Delphi7中实现微信支付支付支付,您可以借助开源的Delphi组件库,并按照其文档和示例代码来进行支付集成工作。这样,您就可以在Delphi7中方便地实现微信支付支付支付的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值