[微信开发] - 微信支付 JSAPI 形式

下载了支付DEMO其实有些地方不对的,比如如果做沙盒测试的时候,需要使用getsignkey,而官方的demo中没有这个.
看了看sf.gg的一个文章,之后把获取getsignkey的api请求加了进去.
现在的 WXPayConstants :
package com.wechat.demo.wxpay; import org.apache.http.client.HttpClient; /**
* 微信支付常量类
*/
public class WXPayConstants { public enum SignType {
MD5, HMACSHA256
} public static final String DOMAIN_API = "api.mch.weixin.qq.com";
public static final String DOMAIN_API2 = "api2.mch.weixin.qq.com";
public static final String DOMAIN_APIHK = "apihk.mch.weixin.qq.com";
public static final String DOMAIN_APIUS = "apius.mch.weixin.qq.com"; public static final String FAIL = "FAIL";
public static final String SUCCESS = "SUCCESS";
public static final String HMACSHA256 = "HMAC-SHA256";
public static final String MD5 = "MD5"; public static final String FIELD_SIGN = "sign";
public static final String FIELD_SIGN_TYPE = "sign_type"; public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9";
public static final String USER_AGENT = WXPAYSDK_VERSION +
" (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion(); //提交付款码支付 https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1
public static final String MICROPAY_URL_SUFFIX = "/pay/micropay";
//统一下单 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder";
//查询订单 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2
public static final String ORDERQUERY_URL_SUFFIX = "/pay/orderquery";
//撤销订单 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_11
public static final String REVERSE_URL_SUFFIX = "/secapi/pay/reverse";
//关闭订单 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_3
public static final String CLOSEORDER_URL_SUFFIX = "/pay/closeorder";
//申请退款 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4
public static final String REFUND_URL_SUFFIX = "/secapi/pay/refund";
//查询退款 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_5
public static final String REFUNDQUERY_URL_SUFFIX = "/pay/refundquery";
//下载对账单 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_6
public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill";
//交易保障 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_8&index=9
public static final String REPORT_URL_SUFFIX = "/payitil/report";
//转换短链接 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_9&index=10
public static final String SHORTURL_URL_SUFFIX = "/tools/shorturl";
//授权码查询openid https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9
public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid"; // sandbox 沙盒测试
public static final String SANDBOX_GETSIGNKEY_URL_SUFFIX = "/sandboxnew/pay/getsignkey";
public static final String SANDBOX_MICROPAY_URL_SUFFIX = "/sandboxnew/pay/micropay";
public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX = "/sandboxnew/pay/unifiedorder";
public static final String SANDBOX_ORDERQUERY_URL_SUFFIX = "/sandboxnew/pay/orderquery";
public static final String SANDBOX_REVERSE_URL_SUFFIX = "/sandboxnew/secapi/pay/reverse";
public static final String SANDBOX_CLOSEORDER_URL_SUFFIX = "/sandboxnew/pay/closeorder";
public static final String SANDBOX_REFUND_URL_SUFFIX = "/sandboxnew/secapi/pay/refund";
public static final String SANDBOX_REFUNDQUERY_URL_SUFFIX = "/sandboxnew/pay/refundquery";
public static final String SANDBOX_DOWNLOADBILL_URL_SUFFIX = "/sandboxnew/pay/downloadbill";
public static final String SANDBOX_REPORT_URL_SUFFIX = "/sandboxnew/payitil/report";
public static final String SANDBOX_SHORTURL_URL_SUFFIX = "/sandboxnew/tools/shorturl";
public static final String SANDBOX_AUTHCODETOOPENID_URL_SUFFIX = "/sandboxnew/tools/authcodetoopenid"; }
请注意上面红色的代码是请求沙盒测试需要的key的请求路径.
之后把请求的方法写到了原来的 WXPayUtil 中:
/**
* 获取sandbox测试需要的signkey
* @param config
* @param wxPay
* @return
* @throws Exception
*/
public static String retrieveSandboxSignKey(IWXPayConfig config, WXPay wxPay) throws Exception {
try {
Map<String, String> params = new HashMap<String, String>();
params.put("mch_id", config.getMchID());
params.put("nonce_str", WXPayUtil.generateNonceStr());
params.put("sign", generateSignatrue(params, config.getKey()));
String strXML = wxPay.requestWithoutCert(WXPayConstants.SANDBOX_GETSIGNKEY_URL_SUFFIX, params, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
if (StringUtils.isBlank(strXML)) {
return null;
}
Map<String, String> result = WXPayUtil.xmlToMap(strXML);
getLogger().info("retrieveSandboxSignKey:" + result);
if ("SUCCESS".equals(result.get("return_code"))) {
return result.get("sandbox_signkey");
}
return null;
}catch(Exception e){
getLogger().info("获取Sandbox_signkey异常",e);
return null;
} }
在这之后就可以根据DEMO中的README去设置一下了.
这里还有官方提供的测试用例:
测试用例的作用是测试支付的传参与返回数据是否正确.
测试了官方支付DEMO后,可以再根据官方的测试用例文档进行相应地处理.
由于现有公司使用的微信平台对接一套php系统,所以暂时没有找到更稳妥的在线测试.
只能进行模拟的测试+后期业务逻辑编写了.
调起支付(需要对接开通支付的微信服务号),现调不起支付也不要紧,只需要按照调起支付
后续编写逻辑代码即可.
[微信开发] - 微信支付 JSAPI 形式的更多相关文章
- 微信公众号支付JSAPI网页,total_fee错误不正确,header重定向参数丢失,无法获取订单号和金额解决
微信公众号支付官方demo错误, 公众号支付只能用在微信里,也就是微信内部浏览器. 1.到WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode ...
- 微信公众号支付JSAPI,提示:2支付缺少参数:appId
因为demo中支付金额是定死的,所以需要调整. 所以在使用的JS上添加了参数传入.这里的传入string类型的参数,直接使用是错误的,对于方法,会出现appid缺少参数的错误 //调用微信JS api ...
- C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置
官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...
- html 微信开发——微信授权
微信JS-SDK说明文档 链接地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 微信web开发:http: ...
- [微信开发] 微信JSAPI - 获取用户地理位置信息
参考博客 http://blog.csdn.net/u013142781/article/details/50503299 主要JS 方法 wx.getLocation 获取地理位置信息传递参数 成功 ...
- C# 微信开发-----微信会员卡(一)
这是微信的官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283,能看懂的朋友就请不要往下看了,我是看不懂 ...
- [微信开发] 微信网页授权Java实现
功能:主要用于在用户通过手机端微信访问第三方H5页面时获取用户的身份信息(openId,昵称,头像,所在地等..)可用来实现微信登录.微信账号绑定.用户身份鉴权等功能. 开发前的准备: 1.需 ...
- 微信开发——微信公众平台实现消息接收以及消息的处理(Java版)
本文主要讲述了如何在微信公众平台实现消息接收以及消息的处理,使用java语言开发,现在把实现思路和代码整理出来分先给兄弟们,希望给他们带来帮助. 温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微 ...
- 微信开发-微信JSSDK错误:invalid url domain
错误类型:invalid url domain 调试返回参数: { "errMsg": "config:invalid url domain" } 截图: 环境 ...
随机推荐
- python 基础 列表生成式 生成器
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...
- SQL死锁知识及解决办法
[翻译]:SQL死锁-死锁排除 min.jiang 2014-03-18 00:23 阅读:874 评论:1 项目中死锁的解决经历 min.jiang 2014-03-17 01:09 阅读: ...
- Elasticsearch Date类型使用技巧
elasticsearch原生支持date类型.这里简单记录下使用的方法. 使用date类型可以用如下两种方式: 使用毫秒的时间戳,直接将毫秒值传入即可. 传入格式化的字符串,默认是ISO 8601标 ...
- hdu1864最大报销额(01背包)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=187#problem/G 该题要注意的就是每张单子A种类的总和不能大与600,同 ...
- 4.keras实现-->生成式深度学习之用变分自编码器VAE生成图像(mnist数据集和名人头像数据集)
变分自编码器(VAE,variatinal autoencoder) VS 生成式对抗网络(GAN,generative adversarial network) 两者不仅适用于图像,还可以 ...
- jQ live用法
我们给元素绑定单击事件.用得最多的都是$("#id").click(function(){}); 但我们动态添加的元素.这样绑定是不行的.必须借助live $("#id ...
- 软件包管理:yum在线管理-yum命令
只要我们的电脑可以接入互联网,那么yum源就是配好的,yum命令可以直接使用. 列出的是服务器上全部的rpm包. 包名,包全名的概念只在rpm手动管理时有用. 关键字主要指包名,只要知道了关键字就可以 ...
- c++虚函数实现机制(转)
前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛 ...
- sql 中延时操作
select 1; WAITFOR DELAY '00:00:30'; select 2; --执行完第一个之后会 延时 30秒,才会执行第二个sql
- GUN C中的attribute
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和 ...