微信官方的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. leadJS初构建

    目录: 1. 面向对象篇 2. 数据结构篇 3. 全局函数篇 4. APICloud篇 1. 面向对象篇 JS原本无法进行程序员世界的面向对象编程,故此对JS封装成一种具有面向对象编程能力的JS. / ...

  2. 非受限联合体 - 现代C++新特性总结

    非受限联合体 非受限联合体:C++98中并不是所有数据类型都能够成为union的数据成员,不允许联合体拥有非POD(Plain Old Data).静态或引用类型的成员. C++11中取消了联合体对于 ...

  3. [LeetCode] 122. Best Time to Buy and Sell Stock II_Easy tag: Dynamic Programming

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  4. Android View事件分发源码分析

    引言 上一篇文章我们介绍了View的事件分发机制,今天我们从源码的角度来学习下事件分发机制. Activity对点击事件的分发过程 事件最先传递给当前Activity,由Activity的dispat ...

  5. windows系统和进程内存基础知识

  6. FAFU 1395

    动态规划:...翻牌FAFU 1395 动态规划

  7. Linux系统下C语言程序的构建过程

    本文转载自:http://www.ruanyifeng.com/blog/2014/11/compiler.html 源码要运行,必须先转成二进制的机器码.这是编译器的任务. 比如,下面这段源码(假定 ...

  8. python webdriver api-读取、设置配置文件

    文件结构: db.ini放置db信息的配置文件 文件中[gloryroad]是section信息 下边的dbname等是option信息 UiObjectMap.ini放置访问web的配置信息 配置用 ...

  9. 如何合并两个Git仓库

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  10. I/O复习

    I/O流之字符流 问题:字节流和字符流区别? java1.0只提供了字节流,分为输出流(Inputstream)和输入流(Outputstream), 以字节为单位来读取或写入数据,以二进制来处理数据 ...