微信支付 Java SDK

对微信支付开发者文档中给出的API进行了封装。

com.github.wxpay.sdk.WXPay类下提供了对应的方法:

方法名

说明microPay

刷卡支付

unifiedOrder

统一下单

orderQuery

查询订单

reverse

撤销订单

closeOrder

关闭订单

refund

申请退款

refundQuery

查询退款

downloadBill

下载对账单

report

交易保障

shortUrl

转换短链接

authCodeToOpenid

授权码查询openid注意:

证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载

建议将证书文件名改为复杂且不容易猜测的文件名

商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件

请妥善保管商户支付密钥、公众帐号SECRET,避免密钥泄露

参数为Map对象,返回类型也是Map

方法内部会将参数会转换成含有appid、mch_id、nonce_str、sign\_type和sign的XML

可选HMAC-SHA256算法和MD5算法签名

通过HTTPS请求得到返回数据后会对其做必要的处理(例如验证签名,签名错误则抛出异常)

对于downloadBill,无论是否成功都返回Map,且都含有return_code和return_msg,若成功,其中return_code为SUCCESS,另外data对应对账单数据

示例

配置类MyConfig:

import com.github.wxpay.sdk.WXPayConfig;

import java.io.*;

public class MyConfig implements WXPayConfig{

private byte[] certData;

public MyConfig() throws Exception {

String certPath = "/path/to/apiclient_cert.p12";

File file = new File(certPath);

InputStream certStream = new FileInputStream(file);

this.certData = new byte[(int) file.length()];

certStream.read(this.certData);

certStream.close();

}

public String getAppID() {

return "wx8888888888888888";

}

public String getMchID() {

return "12888888";

}

public String getKey() {

return "88888888888888888888888888888888";

}

public InputStream getCertStream() {

ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);

return certBis;

}

public int getHttpConnectTimeoutMs() {

return 8000;

}

public int getHttpReadTimeoutMs() {

return 10000;

}

}

统一下单:

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map data = new HashMap();

data.put("body", "腾讯充值中心-QQ会员充值");

data.put("out_trade_no", "2016090910595900000012");

data.put("device_info", "");

data.put("fee_type", "CNY");

data.put("total_fee", "1");

data.put("spbill_create_ip", "123.12.12.123");

data.put("notify_url", "http://www.example.com/wxpay/notify");

data.put("trade_type", "NATIVE"); // 此处指定为扫码支付

data.put("product_id", "12");

try {

Map resp = wxpay.unifiedOrder(data);

System.out.println(resp);

} catch (Exception e) {

e.printStackTrace();

}

}

}

订单查询:

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map data = new HashMap();

data.put("out_trade_no", "2016090910595900000012");

try {

Map resp = wxpay.orderQuery(data);

System.out.println(resp);

} catch (Exception e) {

e.printStackTrace();

}

}

}

退款查询:

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map data = new HashMap();

data.put("out_trade_no", "2016090910595900000012");

try {

Map resp = wxpay.refundQuery(data);

System.out.println(resp);

} catch (Exception e) {

e.printStackTrace();

}

}

}

下载对账单:

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map data = new HashMap();

data.put("bill_date", "20140603");

data.put("bill_type", "ALL");

try {

Map resp = wxpay.downloadBill(data);

System.out.println(resp);

} catch (Exception e) {

e.printStackTrace();

}

}

}

其他API的使用和上面类似。

暂时不支持下载压缩格式的对账单,但可以使用该SDK生成请求用的XML数据:

import com.github.wxpay.sdk.WXPay;

import com.github.wxpay.sdk.WXPayUtil;

import java.util.HashMap;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map data = new HashMap();

data.put("bill_date", "20140603");

data.put("bill_type", "ALL");

data.put("tar_type", "GZIP");

try {

data = wxpay.fillRequestData(data);

System.out.println(WXPayUtil.mapToXml(data));

} catch (Exception e) {

e.printStackTrace();

}

}

}

收到支付结果通知时,需要验证签名,可以这样做:

import com.github.wxpay.sdk.WXPay;

import com.github.wxpay.sdk.WXPayUtil;

import java.util.Map;

public class WXPayExample {

public static void main(String[] args) throws Exception {

String notifyData = "...."; // 支付结果通知的xml格式数据

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

Map notifyMap = WXPayUtil.xmlToMap(notifyData); // 转换成map

if (wxpay.isPayResultNotifySignatureValid(notifyMap)) {

// 签名正确

// 进行处理。

// 注意特殊情况:订单已经退款,但收到了支付结果成功的通知,不应把商户侧订单状态从退款改成支付成功

}

else {

// 签名错误,如果数据里没有sign字段,也认为是签名错误

}

}

}

HTTPS请求可选HMAC-SHA256算法和MD5算法签名:

import com.github.wxpay.sdk.WXPay;

import com.github.wxpay.sdk.WXPayConstants;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config, WXPayConstants.SignType.HMACSHA256);

// ......

}

}

若需要使用sandbox环境:

import com.github.wxpay.sdk.WXPay;

import com.github.wxpay.sdk.WXPayConstants;

public class WXPayExample {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config, WXPayConstants.SignType.MD5, true);

// ......

}

}

微信刷卡 sdk java_微信支付 Java SDK相关推荐

  1. 在sdk中添加源文件_实用干货 | 一步一步教你在SpringBoot中集成微信刷卡支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  2. 微信免密支付php代码实现,微信刷卡支付接入模式及免密流程

    根据商户具体的情况,刷卡支付接入模式可分为:商户后台接入和门店接入: 根据用户是否需要输入支付密码可分为:免密模式和验密模式. 1.接入模式-商户后台接入 该模式适合具备统一后台系统的商户.门店收银台 ...

  3. 关于互相帮忙投票的微信群、微信刷投票群、微信投票刷票群的详情介绍

    关于互相帮忙投票的微信群.微信刷投票群.微信投票刷票群的详情介绍,当前很多微信投票活动慢慢变多,许多人在网上寻找关于"互相帮忙投票的微信群.微信刷投票群.微信投票刷票群"来自己拉票 ...

  4. java微信刷卡支付demo_微信刷卡支付例子

    [实例简介] java微信支付样例~ 刷卡支付源码~自测可以使用,有需要的可以下来使用 [实例截图] [核心代码] wx-pay └── ScanPay └── ScanPay ├── WebCont ...

  5. Android微信刷卡支付开发

    微信开发不容易,在于各个环节的理解和疏通. 支付类型分为几种,每种的业务也不相同,所以就困扰了很多人,我也抱怨过资料的混乱,没办法慢慢梳理. 摸索过后才知道我需要的是刷卡支付业务.公司的Android ...

  6. java实现工单派发_编写官方微信支付 Java SDK 的同学领下工单!

    由于昨天微信被爆官方的 Java SDK 存在支付漏洞,于是今天官方就放出了最新的 SDK.刚好正在接支付这块,立马就 down 了最新的 SDK,maven install,然后项目引入.然后项目就 ...

  7. 引入微信支付Java SDK WxPayAPI_JAVA.zip

    最近需要接入微信支付,百度了很多博客,关键第一步导入微信支付提供的官方sdk就卡住了,那些博客上也没说怎么导入,以前没整过sdk,一下懵了,后来发现WxPayAPI_JAVA.zip解压出来的文件是个 ...

  8. php微信刷卡支付开发,【微信支付】刷卡支付开发者文档

    1.签名算法 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=valu ...

  9. 微信上传素材 java_微信素材上传(JAVA)

    public String uploadMaterial(String url,InputStream sbs,String filelength,String filename, String ty ...

最新文章

  1. 教你两种黑掉“人工智能”的方法
  2. BI工具选型指标,如何选择好的BI工具
  3. 微信小程序组件知识点GET
  4. Maven 项目在 Eclipse 的创建配置
  5. Visual Studio Code 显示隐藏的.git文件和目录
  6. 关闭 IOS8 最近使用 最近联系人
  7. [转帖] Windows 与linux的栈大小问题
  8. linux 源码安装mysql 5.5
  9. sql loader
  10. 海康威视设备发现sdp原理
  11. 芒果广告不能用百度了,怎么办?
  12. LPDDR4X与LPDDR4 区别 <转>
  13. printf()输出格式大全(附 - 示例代码)
  14. 电脑连接热点无internet访问权限_Win10连接wifi后显示无internet访问权限如何解决...
  15. mysql foxpro,如何使用MySql同步Visual Foxpro dbfs?
  16. [置顶] 施一公:优秀博士如何养成(全文) 清华大学演讲
  17. excel双击后公式计算机,#电脑上的excel表格里的数字为什么要双击才能展开#excel文本双击后变数字...
  18. Prophet文档中文翻译--outliers
  19. Javascript 将 jpeg、png转换为webp
  20. 策略模式与工厂模式的区别

热门文章

  1. PostgreSql 常量
  2. 【Java】import org.junit.Test 和@Test报错
  3. 泰坦尼克号乘客生存情况分析第一部分
  4. 定时器node-schedule使用
  5. webpack--黑洞级入门
  6. leaflet实现风场图
  7. 携程回应大数据杀熟并致歉 二次支付无票是系统Bug
  8. FT60F011A/FT60F010A为辉芒微电子基本I/O型系列Flash单片机SOT23-6/SOP8
  9. 台式计算机的电流是多少安,电脑usb支持瞬间电流是多大?
  10. 对安卓手机上的APP做monkey压力测试