小程序 或 公众号 调用 支付

/**
*
* @Title: xcxPay
* @Description: (小程序支付通用方法)
* @param map
* @return Map<String,Object> (这里描述输出参数的作用)
* @throws Exception
* @throws
* @author huyuhang
* @date 2019年3月27日 下午1:53:56
*/
public static Map<String,Object> xcxPay(Map<String,Object> map) throws Exception{
Map<String, Object> payParam = new HashMap<String,Object>();
String appid=(String)map.get("appid");//小程序对于的AppID
String partner_key=(String)map.get("partner_key");//秘钥
String mch_id=(String)map.get("mch_id");//小程序对应得商户号
String description=(String)map.get("description");//小程序对于的描述
String number=(String)map.get("number");//用户充值记录的订单号
BigDecimal price= (BigDecimal)map.get("price");//对于的支付价格
String openid=(String)map.get("openid");//小程序支付对应人的openid
String attach=(String)map.get("attach");
String notify_url=(String)map.get("notify_url");//回调地址
String apppath = (String)map.get("apppath");//项目IP地址
//组装掉器支付参数 begin
Map<String, Object> data = new HashMap<String, Object>();
data.put("appid", appid);
data.put("mch_id",mch_id);
data.put("nonce_str", String.valueOf(System.currentTimeMillis() * 3));
data.put("body",description);
data.put("out_trade_no", number);
data.put("total_fee", String.valueOf(price.multiply(new BigDecimal(100)).intValue()));
data.put("spbill_create_ip", apppath);
data.put("notify_url", notify_url);
data.put("trade_type", "JSAPI");
data.put("attach", attach);
data.put("openid", openid);
LogUtil.info("xcxPay***********data=" +data.toString());
//组装掉器支付参数 end
//将参数进行排序处理begin
List<String> list = getSort(data);
//将参数进行排序处理end
//xml begin
Document document = DocumentHelper.createDocument();
Element xml = document.addElement("xml");
StringBuffer str = new StringBuffer();
for (String key : list) {
xml.addElement(key).addCDATA(data.get(key).toString());
str.append(key + "=" + data.get(key) + "&");
}
str.append("key=" + partner_key);// 密钥(PartnerKey)
xml.addElement("sign").addCDATA(com.dns.common.terminal.base.MD5Utils.StringToMD5(str.toString()).toUpperCase());
//xml end

//调用接口 begin
LogUtil.info("xcxPay***********发送" + document.asXML());
String back = SendUtil.sendToUrl(document.asXML(), "https://api.mch.weixin.qq.com/pay/unifiedorder", "utf-8");
LogUtil.info("xcxPay***********返回" + back);
//调用接口 end 返回

//解析返回报文 begin
Document backDom = DocumentHelper.parseText(back);
Element root = backDom.getRootElement();
if ("SUCCESS".equals(root.element("return_code").getTextTrim()) && "SUCCESS".equals(root.element("result_code").getTextTrim())){
payParam.put("appId",appid);//小程序所需要的支付参数
payParam.put("timeStamp", System.currentTimeMillis());//小程序所需要的支付参数
payParam.put("nonceStr", String.valueOf(System.currentTimeMillis() * 3));//小程序所需要的支付参数
payParam.put("package", "prepay_id=" + root.element("prepay_id").getTextTrim());//小程序所需要的支付参数
payParam.put("signType", "MD5");//小程序所需要的支付参数
StringBuffer payStr = new StringBuffer();
List<String> payList = getSort(payParam);
for (String key : payList) {
payStr.append(key + "=" + payParam.get(key) + "&");
}
payStr.append("key=" +partner_key);// 密钥(PartnerKey)
payParam.put("paySign", StringToMD5(payStr.toString()).toUpperCase()); //小程序所需要的支付参数
payParam.put("number",number);//获取参数成功 ,告诉小程序端订单号 非小程序所需要的支付参数
}else{
//payParam.put("ifToPay","false");//默认给小程序掉起参数失败,置为失败标识
throw new Exception("小程序获取支付参数失败");
}
return payParam;
}
public static List<String> getSort(Map<String, Object> map) {
List<String> list = new ArrayList<String>();
Set<String> keys = map.keySet();
for (String key : keys) {
list.add(key);
}
Collections.sort(list);
return list;
}
public static String StringToMD5(String plainText) {
String md5str = "";

try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
md5str = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
// 默认密码:"123456"
md5str = "e10adc3949ba59abbe56e057f20f883e";
}

return md5str;
}

原文地址:https://www.cnblogs.com/xadminhuyh/p/10652856.html

时间: 2024-10-04 23:13:41

小程序 或 公众号 调用 支付的相关文章

微会动微信现场互动:7种小程序给公众号导流的方法

微信生态下,公众号.小程序.社群.个人号是运营同学必不可缺的运营工具,但彼此之间如何引流呢?公众号给小程序导流容易,小程序做裂变也比公众号容易,但小程序的用户流失快,怎么通过公众号实现粉丝留存呢? 关于小程序给公众号导流的方法,我一口气找了7个. 1.抽奖活动,关注公众号领奖 活动流程如下:进入小程序-获得1次刮奖机会-进入活动页面刮奖-获得1个抽奖码-刮完提示转发到微信群再获得3次刮奖机会-转发微信群-继续刮奖-获得3个刮奖码-提示用户关注公众号接收中奖通知-点击弹出客服会话窗口-弹出公众号二

“小程序+”时代——公众号拓展系统

如今,微信已经成为全球使用人数最多的移动通讯应用,用户数量呈爆发式增长,是当前中国最重要的智能手机应用终端之一.而微信公众号于2012年8月诞生,至今约有上千万个微信公众号. 而微信小程序于2017年1月9日凌晨正式上线.小程序一开始作为微信生态万物互联的连接器出现,具备链接线上与线下的诸多能力.因此,大量的线下传统企业为了实现互联网+,提升企业效率,就刚好找到这个需要合适的渠道连接器. 在这种国内小程序蓬勃发展的大前提下,11月22日,在微盟小程序沙龙长沙站上,微盟创始人兼CEO孙涛勇现场就小

小程序绑定公众号进行消息推送,公众号授权功能

小程序绑定公众号,通过公众号进行消息推送,首先要在小程序上进行公众号的授权 授权不可以直接在小程序上打开,所以必须要小程序先跳到其他网页,再跳回小程序 1.我们是做了一个先做账号绑定小程序,再做公众号绑定小程序,没有绑定的话,就跳到外部链接 wxBind () { // 绑定账号之后,再绑定小程序 let that = this.data; const data = { account: that.userInfo.account, openid: wx.getStorageSync('open

微信支付-小程序H5 公众号 Payment SDK

前言 今天是2020年一天,去年最后一个月开发了订单和支付系统,尤其在支付系统和微信对接的时候遇到了很多坑,这里给大家总结下,以免大家遇到相同的问题还浪费大量时间 微信支付前期准备 微信商户号,需要商户号,密码 ,退款时需要证书,证书默认密码是商户号 微信app(如 微信小程序 或者 微信公众号) 的appid和appsecret 需要在商户中关联微信小程序和微信公众号,然后运营者确认. 至此微信支付前期工作完成 Payment 封装了微信 支付宝 银联等很多支付的SDK git地址 https

微信小程序及公众号发微信消息文档

1.微信官方文档,服务端统一消息接口(优先发送小程序模板消息,然后是公众号模板消息) https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html 2.小程序订阅消息文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-me

公众号微信支付

1.概要 公众号是以微信用户的一个联系人形式存在的,支付是微信服务号的核心一环. 本篇主要介绍微信支付这一功能,避免大家再跳微信支付的坑. 1.1 关于Magicodes.WeChat.SDK MAGICODES.WECHAT.SDK为心莱团队封装的轻量级微信SDK,现已全部开源,开源库地址为:https://github.com/xin-lai/Magicodes.WeChat.SDK 更多介绍,请关注后续博客. 2.微信公众号支付 用户已有商城网址,用户通过微信消息.微信扫描二维码.微信自定

微信小程序(应用号)开发资源汇总整理 - 一直更新中

开源项目 wechat-weapp-gank - 微信小程序版Gank客户端 wechat-dribbble - 微信小程序-Dribbble wechatApp-demo - 微信小程序 DEMO weapp-ide-crack - 微信小应用资源破解 API - API 文档 weapp-quick - 微信小应用示例代码 weapp-gold - 掘金主页 微信小应用示例 weapp-douban - 豆瓣电影 微信小程序 wechat-app-zhihudaily - 微信小程序版的知乎

微信公众号JSAPI支付

微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心->网页服务->网页授权获取用户基本信息->修改; “授权回调页面域名修改成你的域名地址即可,须保证网页授权已获得,不然会报redirect_uri 参数错误; 三:网页授权获取用户openid js_api_call.php 请求文件中改动(所有传给微信的参数都在入口文件中接收) $out_tr

微信小程序、应用号、订阅号、服务号、企业号小总结

微信小程序是现在微信推出的一个新的项目,但是很多人都不是很清楚微信小程序是怎么一回事,不明白到底怎样分别微信小程序和别的公众号.订阅号等的区别,那么让小编来给你介绍一下. 微信小程序目前是内侧阶段,是一款非常实用省心的应用分发市场,那么应用号与企业号.订阅号.服务号有什么区别呢? 微信小程序.应用号.订阅号.服务号.企业号区别介绍 Q:微信已经有了订阅号.服务号.企业号,小程序和这三者有什么不同? A:小程序.订阅号.服务号.企业号目前是并行的体系. Q:外界有说法称,小程序的推出意味着微信要做