liyiorg / weixin-popular Goto Github PK
View Code? Open in Web Editor NEW微信SDK JAVA (公众平台、开放平台、 商户平台、 服务商平台)
License: Apache License 2.0
微信SDK JAVA (公众平台、开放平台、 商户平台、 服务商平台)
License: Apache License 2.0
是不是能够在此基础上,使用Spring Boot制作一个快速使用的完整项目?不知道您有没有这个计划。
@liyiorg
LocalHttpClient.initMchKeyStore在什么时候被调用
MchPayNotify继承MchBaseResult,只是Map<String,String> map = MapUtil.objectToMap(payNotify)这里产生的map是不包括MchBaseResult里面的变量
[ERROR] F:\weixin-popular-master\src\main\java\weixin\popular\util\XMLConverUtil.java:[18,43] 错误: 程序包com.sun.xml.internal.bind.marshaller不存在
第三方API ComponentAPI 里面用的全是BASE_URI
应该是MP_URI
TokenAPI.token()获取不到token---》
应该使用get请求
TokenManager token 自动刷新问题,如果线程出现异常,任务调度不调用了,请问下有没有什么好的解决方法
解决了蛮久也解决不好,现在我的BODY中无奈用"orderIdxxxxx"替代了中文,不然总是签名不过,求解。
private List< Button> sub_button; 应该改成 private Button sub_button;
如题,微信接收消息的类型或事件是类型,在代码中有相应的类进行封装么?具体在哪个包下啊?
昨天刚开始用,接收了几种类型的消息,image,text等,不知道有没有写好的类。还是说自己手动给封装一下啊?
别外,还有好多api,文档比较少
不知道怎么调用
群发api没看懂,能否发个案例,菜鸟求理解...
您好,微信官方文档中退款api需要证书,请问调用您写的退款接口需要证书吗,如果需要怎么传?
自己在调试中发现是 weixin.popular.util.SignatureUtil
这个class 下边的签名方法所致
/**
* 生成sign MD5 加密 toUpperCase
* @param map map
* @param paternerKey paternerKey
* @return sign
*/
public static String generateSign(Map<String, String> map,String paternerKey){
Map<String, String> tmap = MapUtil.order(map);
if(tmap.containsKey("sign")){
tmap.remove("sign");
}
String str = MapUtil.mapJoin(tmap, false, false);
return DigestUtils.md5Hex(str+"&key="+paternerKey).toUpperCase();
}
修改如下:
DigestUtils.md5Hex(str+"&key="+paternerKey)
=> DigestUtils.md5Hex((str+"&key="+paternerKey).getBytes("UTF-8"))
希望 @liyiorg 在下个版本解决下。
两次微信接口调用之间如果间隔超过2秒,都能成功返回。如果第一次和第二次间隔时间很短,第二次就会报org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:143)
从1月7日起出现这个情况。
请问是什么原因?
Delivernotify Bean, out_trade_no, you write out_trade_to, So, it's error
例如:
SnsAPI snsAPI = new SnsAPI();
User user = snsAPI.userinfo(accessToken, openId, lang);
这个接口,现在微信返回多了unionid这个字段,程序报错:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "unionid" (class weixin.popular.bean.User), not marked as ignorable (13 known properties: "subscribe_time", "openid", "sex", "subscribe", "city", "headimgurl", "nickname", "province", "privilege", "errcode", "country", "language", "errmsg"])
只有TokenManager,可以补一个ComponentAccessTokenManager来管理第三方平台的access_token
现在遇到一个问题就是商户签名错误,用了官网的签名验证工具发现生成的paySign和你的SDK生成的不一样,我不知道我SDK用的对不对,能否贴出一个示例?
com.sun.* 包是不被有效支持的,现在有些版本的JDK CharacterEscapeHandler 这个类已经被删除了。
这个问题不知道是我使用API的问题, 还是的确你们没有注意到, 在MCH退款申请的时候需要双向HTTPS双向认证, 其中还会用到私钥文件.
不知道这里怎么代码格式化, 请自行复制再修改
修改如下(建议)
在HttpClientFactory增加如下方法(此方法为官方文档中的代码)
public static CloseableHttpClient createSslHttpClient() {
KeyStore keyStore;
try {
keyStore = KeyStore.getInstance("PKCS12");
FileInputStream instream = new FileInputStream(new File(WxwebConfig.PKCS12_FILE));//这里是私钥文件
try {
keyStore.load(instream, WxwebConfig.MCH_ID.toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts
.custom()
.loadKeyMaterial(keyStore, WxwebConfig.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();
return httpclient;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
在进行退款申请的时候要用此方法构建CloseableHttpClient , 大致代码如下
/**
* 退款申请
*
* 注意:
* 1.交易时间超过1 年的订单无法提交退款;
* 2.支持部分退款,部分退需要设置相同的订单号和不同的out_refund_no。一笔退款失
* 败后重新提交,要采用原来的out_refund_no。总退款金额不能超过用户实际支付金额。
* @param secapiPayRefund
* @param key 商户支付密钥
* @return
*/
public static SecapiPayRefundResult secapiPayRefund(SecapiPayRefund secapiPayRefund,String key){
Map<String,String> map = MapUtil.objectToMap( secapiPayRefund);
String sign = SignatureUtil.generateSign(map,key);
secapiPayRefund.setSign(sign);
String secapiPayRefundXML = XMLConverUtil.convertToXML( secapiPayRefund);
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setHeader(xmlHeader)
.setUri(MCH_URI + "/secapi/pay/refund")
.setEntity(new StringEntity(secapiPayRefundXML,Charset.forName("utf-8")))
.build();
//此为原始代码
//return LocalHttpClient.executeXmlResult(httpUriRequest,SecapiPayRefundResult.class);
//此为建议更新的代码
CloseableHttpClient hc = HttpClientFactory.createSslHttpClient();
try {
return ((SecapiPayRefundResult) hc.execute(httpUriRequest, XmlResponseHandler.createResponseHandler(SecapiPayRefundResult.class)));
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project weixin-popular: Compilation failure: Compilation failure:
[ERROR] \github\weixin-popular\src\main\java\weixin\popular\util\XMLConverUtil.java:[3,43] 错误: 程序包com.sun.xml.internal.bind.marshaller不存在
[ERROR] \github\weixin-popular\src\main\java\weixin\popular\util\XMLConverUtil.java:[90,39] 错误: 找不到符号
[ERROR] \github\weixin-popular\src\main\java\weixin\popular\util\XMLConverUtil.java:[90,83] 错误: 找不到符号
pay_sign_key指的是什么?邮箱里面没这个信息啊,谢谢~
weixin.popular.bean.component.ApiGetAuthorizerInfoResult 类中有个 qrcode_url 字段,应该是属于Authorizer_info 中的字段。
微信文档那边就写错了。所以按你现在ApiGetAuthorizerInfoResult 中的写法是拿不到值的。
// 统一下单,生成预支付订单
UnifiedorderResult unifiedorderResult = PayMchAPI.payUnifiedorder(unifiedorder,key);
String json = PayUtil.generateMchPayJsRequestJson(unifiedorderResult.getPrepay_id(), appid, key);
我运行的时候 unifiedorderResult.getPrepay_id() 取得 null, 应该怎么除错 ??
Unifiedorder unifiedorder = new Unifiedorder();
unifiedorder.setAppid(appid);
unifiedorder.setMch_id(mch_id);
unifiedorder.setNonce_str(UUID.randomUUID().toString().replace("-", ""));
//body中数据设置为中文时,无法验证签名通过
unifiedorder.setBody("商品信息");
unifiedorder.setOut_trade_no("123456");
unifiedorder.setTotal_fee("1");//单位分
unifiedorder.setSpbill_create_ip(request.getRemoteAddr());//IP
unifiedorder.setNotify_url("http://mydomain.com/test/notify");
unifiedorder.setTrade_type("JSAPI");//JSAPI,NATIVE,APP,WAP
UnifiedorderResult unifiedorderResult = PayMchAPI.payUnifiedorder(unifiedorder,key);
String json = PayUtil.generateMchPayJsRequestJson(unifiedorderResult.getPrepay_id(), appid, key);
微信支付请求新版在JSSDK端要求timestamp必须是全小写。
而PayJsRequest对象里的timeStamp是驼峰式命名法。
参考下列微信文档:
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
ReceiveServlet中对验证的顺序与官方文档不符:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
请参照API包里的文件。谢谢。
微信支付的规则又改了,增加了MCH_ID(商户号),看上去是去掉了paySignkey,要求在请求前先生成preOrderId,再供JSREQUEST调用。
希望G主早日更新。
以前版本也是用你这个 挺好用的,以前版本有方法注释 怎么现在都没了呢。
报Content is not allowed in prolog.]错误
请问在使用PayMchAPI的mmpaymkttransfersPromotionTransfers时有没有遇到OPENID_ERROR (openid和appid不匹配)的问题 :)
我在使用时已确保该openid账号已经关注了该公众账号,调用代码如下,但是一直提示OPENID_ERROR (openid和appid不匹配)
Transfers transfers = new Transfers();
transfers.setMch_appid("wx9d154566xxxxxxx");
transfers.setMchid("xxxxxxxxx");
transfers.setOpenid("olEows2vTZxKZ6z3eavTDsfOky5k");
transfers.setNonce_str(MRandomUtils.generateString(32));
transfers.setPartner_trade_no(MDateUtils.generateOrderNO());
transfers.setCheck_name("NO_CHECK");
transfers.setAmount("100");
transfers.setDesc("约会退款");
transfers.setSpbill_create_ip("xx.xx.xx.xx");
LocalHttpClient.initMchKeyStore("12345678", p12_file);
TransfersResult result = PayMchAPI.mmpaymkttransfersPromotionTransfers(
transfers, key);
多谢!
红包发送接口,微信返回的错误信息乱码,
PayMchAPI.mmpaymkttransfersSendredpack调用返回的SendredpackResult对象乱码
"err_code_des":"????:re_openid?????,???????"
@liyiorg 你好,我在统一下单时遇到了如下问题:
我把detail相关信息增加到里面之后微信端提示有误,然后我去掉detail信息就又可以了。
所以想问下这个detail信息中参数是否有误,或者是detail中字段的来源是从哪儿获知的,我在微信开发文档中没有找到这块的描述。
因为微信扫码时就提示的是参数有问题。
麻烦解答下,谢谢
如题,我**仓库怎么设置?
CardAPI codeConsume和codeDecrypt方法的bug
方法中return值为return "access_token" or "authorizer_access_token"
但是对于第三方模式下,貌似参数也是"access_token",并非 "authorizer_access_token"
@liyiorg
String jsapi_ticket = TicketManager.getTicket(appId);
String configjson = JsUtil.generateConfigJson(jsapi_ticket, false, appId, url, jsApiList);
调用上面方法返回的configjson,直接配置 wx.config(configjson),提示'config:fail'错误,怎么解决此问题
/**
* 初始化ticket(jsapi) 刷新,每119分钟刷新一次。
* 依赖TokenManager
* @param appid appid
/
public static void init(final String appid){
init(appid,0,60119);
}
这里刷新 为什么是119分钟 微信不是 文档不是说7200秒么 是我理解有吴还是什么问题
多个公众号TokenManager.init("appid", "appsecret");是不是也要配置多条?
compile group: 'weixin', name: 'weixin-popular', version: '2.5.0-RELEASE'
1,MaterialAPI.add_material 方法上传的视频,会出现乱码。
multipartEntityBuilder.addTextBody("description", JsonUtil.toJSONString(description)); 改为multipartEntityBuilder.addTextBody("description", JsonUtil.toJSONString(description), ContentType.create("text/plain", CHARSET_UTF8)); 之后 才正常显示。
2,上传几百k的视频没问题, 但是上传手机拍摄的mp4,视频大小为1.5M 1秒, 4M 2秒, 9M 4秒 , 15M 11秒 均报错:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.