jfinal微信支付
private static final String appid = PropKit.get("appid"); //应用ID
private static final String mch_id = PropKit.get("mch_id"); //商户号
private static final String paternerKey = PropKit.get("paternerkey"); //支付密钥
private static final String notify_url = PropKit.get("notify_url"); //通知地址
public RetKit weixinPay(String ip,String amount,Map<String,Object> map){
// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
//调起微信支付,统一下单
Map<String,String> params = new HashMap<String,String>();
params.put("appid", appid);
params.put("mch_id", mch_id);
params.put("body", "魅格");
params.put("out_trade_no", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+(int)(Math.random()*90000+10000)); //订单编号
params.put("total_fee", amount); //订单金额 单位为分
if(StrKit.isBlank(ip)){
ip = "127.0.0.1";
}
params.put("spbill_create_ip", ip); //终端ip
params.put("trade_type", TradeType.APP.name()); //交易类型app:手机app支付,NATIVE:返回支付连接,可转成二维码客户扫描支付
params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); //随机字符串
params.put("notify_url", notify_url); //支付后通知回调地址
params.put("attach", map.toString()); //附加数据,支付后原数据返回
String sign = PaymentKit.createSign(params, paternerKey); //生成签名
params.put("sign", sign);
//下单
String xmlResult = PaymentApi.pushOrder(params);
System.out.println("下单后结果"+xmlResult);
Map<String,String> result = PaymentKit.xmlToMap(xmlResult);
String return_code = result.get("return_code");
String return_msg = result.get("return_msg");
if(StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)){
return RetKit.fail(return_msg);
}
String result_code = result.get("result_code");
if(StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)){
return RetKit.fail(return_msg);
}
return RetKit.okData(xmlResult);
}
2,支付结果回调,微信不保证会一定返回结果通知,正常会调用多次
获取支付结果
String xmlMsg = HttpKit.readData(getRequest());
public RetKit weixinPay_notify(String xmlMsg){
// 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
System.out.println("支付通知"+xmlMsg);
Map<String,String> result = PaymentKit.xmlToMap(xmlMsg);
String result_code = result.get("result_code");
//总金额
String total_fee = result.get("total_fee");
Double amount = Double.valueOf(total_fee)*0.01;
//商户订单号
String trade_no = result.get("out_trade_no");
//微信支付订单号
String transaction_id = result.get("transaction_id");
//附近数据
String attach = result.get("attach");
//支付完成时间
//String time_end = result.get("time_end");
// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
// 避免已经成功、关闭、退款的订单被再次更新
if(PaymentKit.verifyNotify(result, paternerKey)){
if("SUCCESS".equals(result_code)){
//添加各种流水
addBills(attach,Reward.access_weixin, amount.toString(), trade_no, transaction_id);
}
}
return RetKit.ok();
}
支付结果通用通知文档
jfinal微信支付的更多相关文章
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- Android—基于微信开放平台v3SDK,开发微信支付填坑。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...
- 解决新版Android studio导入微信支付和支付宝官方Demo的问题
最近项目要用到支付宝支付和微信支付,本想使用第三方支付框架ping++或者BeeCloud的,但是由于他们的收费问题,让我望而却步,而且公司给了相应的公钥.私钥和APPID等,所以就用下开放平台的呗. ...
- C#开发微信门户及应用(35)--微信支付之企业付款封装操作
在前面几篇随笔,都是介绍微信支付及红包相关的内容,其实支付部分的内容还有很多,例如企业付款.公众号支付或刷卡支付.摇一摇红包.代金券等方面的内容,这些都是微信接口支持的内容,本篇继续微信支付这一主题, ...
- C#开发微信门户及应用(32)--微信支付接入和API封装使用
在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去,微信支付旨在为广大微信用户及商户提供更优质的支付服务,微信的支付 ...
- C#开发微信门户及应用(40)--使用微信JSAPI实现微信支付功能
在我前面的几篇博客,有介绍了微信支付.微信红包.企业付款等各种和支付相关的操作,不过上面都是基于微信普通API的封装,本篇随笔继续微信支付这一主题,继续介绍基于微信网页JSAPI的方式发起的微信支付功 ...
随机推荐
- 初识python (一)
初识Python(一) python2和python3的一些区别 Python2 和 Python3 区别汇总:http://www.cnblogs.com/bigtreei/p/7806288.ht ...
- Android项目使用Ant多渠道打包(最新sdk)
参考文章: http://blog.csdn.net/liuhe688/article/details/6679879 http://www.eoeandroid.com/thread-323111- ...
- 【Linux】Ubuntu下录屏&&制作GIF
在做Android的时候,想制作GIF用来演示效果.一番摸索.找到了一个简单可行的办法: App在模拟器中执行,用录屏软件录制.再将视频转成GIF. 系统: Ubuntu 15.04 录屏软件: Re ...
- hadoop开发MapReduce程序
准备工作: 1.设置HADOOP_HOME,指向hadoop安装目录 2.在window下,需要把hadoop/bin那个目录替换下,在网上搜一个对应版本的 3.如果还报org.apache.hado ...
- tomcat 配置文件 介绍
[root@mysql logs]# cd ../conf/ [root@mysql conf]# ll总用量 228drwxr-x---. 3 root root 4096 11月 15 2018 ...
- ImageMagick来处理图片,缩放,调整高度等操作
单个缩放图片 convert 911.jpg -resize 25% 911.jpg 前面是要处理的图片路径,后面是输出的图片路径,我这么写就把原先图片缩放了 批量缩放图片 mogrify -samp ...
- VS2013 IIS Express 无法显示站点目录列表
VS2013 默认使用IIS Express作为虚拟服务器,或许出于与安全考虑该版本的IIS Express默认关闭站点目录列表显示的功能,访问时会出现以下错误: 为了方便起见,我使用了全局设 ...
- python2.7中的字符编码问题
0. 写在前面 起因:之前写个数据预处理程序的时候遇到了点问题,用re模块的正则查找方法search时总是找不出来(找错了或者出乱码),于是捣鼓捣鼓. 经过:查资料,做实验,发现用utf8编码的str ...
- MySQL SQL Injection(注入)
如果通过网页接收用户输入,而后再把这些数据插入到数据库中,那么你可能就会碰到 SQL 注入式攻击.本节简要介绍如何防范这种攻击,确保脚本和 MySQL 语句的安全性. 注入式攻击往往发生在要求用户输入 ...
- AngularJS post传值后台获取不到
AngularJS post传值后台获取不到 一般的思路: 解决办法: 1.设置一下default head 2.参数转换一下data:$.param({orderNo: orderNo,sessi ...