微信官方的JSAPI文档

微信官方的JSAPI支付SDK与DEMO下载

查看JSAPI的API可以从这里看

下载了支付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 形式的更多相关文章

  1. 微信公众号支付JSAPI网页,total_fee错误不正确,header重定向参数丢失,无法获取订单号和金额解决

    微信公众号支付官方demo错误, 公众号支付只能用在微信里,也就是微信内部浏览器. 1.到WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode ...

  2. 微信公众号支付JSAPI,提示:2支付缺少参数:appId

    因为demo中支付金额是定死的,所以需要调整. 所以在使用的JS上添加了参数传入.这里的传入string类型的参数,直接使用是错误的,对于方法,会出现appid缺少参数的错误 //调用微信JS api ...

  3. C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置

    官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...

  4. html 微信开发——微信授权

    微信JS-SDK说明文档 链接地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 微信web开发:http: ...

  5. [微信开发] 微信JSAPI - 获取用户地理位置信息

    参考博客 http://blog.csdn.net/u013142781/article/details/50503299 主要JS 方法 wx.getLocation 获取地理位置信息传递参数 成功 ...

  6. C# 微信开发-----微信会员卡(一)

    这是微信的官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283,能看懂的朋友就请不要往下看了,我是看不懂 ...

  7. [微信开发] 微信网页授权Java实现

    功能:主要用于在用户通过手机端微信访问第三方H5页面时获取用户的身份信息(openId,昵称,头像,所在地等..)可用来实现微信登录.微信账号绑定.用户身份鉴权等功能.     开发前的准备: 1.需 ...

  8. 微信开发——微信公众平台实现消息接收以及消息的处理(Java版)

    本文主要讲述了如何在微信公众平台实现消息接收以及消息的处理,使用java语言开发,现在把实现思路和代码整理出来分先给兄弟们,希望给他们带来帮助. 温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微 ...

  9. 微信开发-微信JSSDK错误:invalid url domain

    错误类型:invalid url domain 调试返回参数: { "errMsg": "config:invalid url domain" } 截图: 环境 ...

随机推荐

  1. 第五课 JAVA反射获取对象属性和方法(通过配置文件)

    Service1.java package reflection; public class Service1 { public void doService1(){ System.out.print ...

  2. how to add borders for a google map marker 谷歌地图 自己定义图钉

    If you are not satisfied with default Google map Marker (Default google marker can only be a icon, i ...

  3. 十天精通CSS3(11)

    Media Queries——媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...

  4. python中operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...

  5. (转)Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  6. Outlier Detection

    1)正态分布数据,飘出95%的可能是异常值.变量var正态标准化,|var|<=1.96的可能是异常值,further chk needed!large sample better. 对于偏态分 ...

  7. [LeetCode] 438. Find All Anagrams in a String_Easy

    438. Find All Anagrams in a String DescriptionHintsSubmissionsDiscussSolution   Pick One Given a str ...

  8. sklearn_SVM

    一.用SVM实现二分类: 支持向量机分类器,是在数据空间中找出一个超平面作为决策边界,利用这个决策边界来对数据进行分类,并使分类误差尽量小的模型                             ...

  9. word转pdf时图片质量下降的解决方案__亲测有效

    写论文时经常需要将word文档转成pdf文档,通常的做法是word另存为pdf文档,这样很简洁很方面,可是最大的问题是图片质量会大大下降.究其原因,“另存为”选项会压缩图片,以降低pdf文档的大小.解 ...

  10. svn导出文件夹到另外目录export

    svn导出文件夹到另外目录export 2.选择目录,下面两个选项不用勾选 3.有存在的文件选择overwrite覆盖,勾选下面的同样操作