最近工作接触到微信支付,刚开始解决微信支付很神秘,接触之后发现并没有那么神秘,就是有很多坑,在开发的时候需要注意,整理出来:

1.准备工作

首先需要登录微信支付公众平台阅读接口文档,地址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_12&index=2 ;

其次了解微信支付商户系统和微信支付系统主要交互说明:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明

步骤5:商户后台接收支付通知。api参见【支付结果通知API

步骤6:商户后台查询支付结果。,api参见【查询订单API

然后是微信支付交互过程

2.开始工作

不需要导入微信支付的jar包,需要哪些jar导入哪些就可以,

发送统一下单请求调用:

/**



* @方法名称:sendWxPayRequest

* @内容摘要: <发送统一下单请求>

* @param body

* @param outTradeNo

* @param totalFee

* @param spBillCreateIP

* @return 

* String

* @exception 

* @author:鹿伟伟

* @创建日期:2016年2月19日-下午2:24:05

*/

public String sendWxPayRequest(String body,String detail,String outTradeNo,int totalFee,String spBillCreateIP

    )

{

// 构造HTTP请求

HttpClient httpclient = new HttpClient();

PostMethod postMethod = new PostMethod(Configure.PAY_API);

WxPayReqData wxdata = new WxPayReqData(body,detail,outTradeNo,totalFee,spBillCreateIP);

StringBuffer requestStr = new StringBuffer(

"<xml>");

requestStr.append("<appid><![CDATA[");

requestStr.append(wxdata.getAppid());

requestStr.append("]]></appid>");

requestStr.append("<body><![CDATA[");

requestStr.append(wxdata.getBody());

requestStr.append("]]></body>");

requestStr.append("<mch_id><![CDATA[");

requestStr.append(wxdata.getMch_id());

requestStr.append("]]></mch_id>");

requestStr.append("<nonce_str><![CDATA[");

requestStr.append(wxdata.getNonce_str());

requestStr.append("]]></nonce_str>");

requestStr.append("<notify_url><![CDATA[");

requestStr.append(wxdata.getNotify_url());

requestStr.append("]]></notify_url>");

requestStr.append("<out_trade_no><![CDATA[");

requestStr.append(wxdata.getOut_trade_no());

requestStr.append("]]></out_trade_no>");

requestStr.append("<spbill_create_ip><![CDATA[");

requestStr.append(wxdata.getSpbill_create_ip());

requestStr.append("]]></spbill_create_ip>");

requestStr.append("<total_fee><![CDATA[");

requestStr.append(wxdata.getTotal_fee());

requestStr.append("]]></total_fee>");

requestStr.append("<trade_type><![CDATA[");

requestStr.append(wxdata.getTrade_type());

requestStr.append("]]></trade_type>");

requestStr.append("<sign><![CDATA[");

requestStr.append(wxdata.getSign());

requestStr.append("]]></sign>");

requestStr.append("</xml>");

// 发送请求

String strResponse = null;

try {

RequestEntity entity = new StringRequestEntity(

requestStr.toString(), "text/xml", "UTF-8");

postMethod.setRequestEntity(entity);

httpclient.executeMethod(postMethod);

strResponse = new String(postMethod.getResponseBody(), "utf-8");

Logger.getLogger(getClass()).debug(strResponse);

} catch (HttpException e) {

Logger.getLogger(getClass()).error("sendWxPayRequest", e);

} catch (IOException e) {

Logger.getLogger(getClass()).error("sendWxPayRequest", e);

} finally {

postMethod.releaseConnection();

}

return strResponse;

}

3.问题:

客户端调起微信支付接口是一直返回-1:

a.你要用验证过的keystore打包出来安装才能正常进入支付,否则不能进入微信,有可能出现-1的情况;

b.你的手机确认要有安装微信app;

微信支付(java版本)_统一下单的更多相关文章

  1. 微信支付(java版本)_支付结果通知

    应用场景: 支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新 ...

  2. 微信支付报错:统一下单和拉起支付的appid不一致(原创)

    微信支付报错:统一下单和拉起支付的appid不一致 错误码:-2 提示参考: 参考统一下单的API (谦信君原创,转载请注明来源) 原因排查: 我们做的是APP微信支付 客户端向我服务端发请求,获取预 ...

  3. 微信小程序之微信支付C#后台(统一下单)

    一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...

  4. 微信APP支付V3版本签名 && APP下单/订单查询接口Python版实现

    问题背景 最近接入微信支付,微信官方并没有提供Python版的服务端SDK,因而只能根据文档手动实现一版,这里记录一下微信支付的整体流程.踩坑过程与最终具体实现. 微信支付APP下单流程 根据微信官方 ...

  5. 微信支付java开发

    微信公众平台 (此处只讲pay) 微信商户平台,公众号的后台管理工具,包含公众号的商户信息,公众号支付,扫码支付,刷卡支付 1.商户信息包含商户号,和此公众平台关联的商户号,需登录商户平台设置商户秘钥 ...

  6. 崔用志-微信开发-java版本

    崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...

  7. 微信支付java版V3验证数据合法性

    [TOC] 1. 微信支付java版V3验证数据合法性 概要:使用微信支付接口时,微信会返回或回调给商户XML数据,开发者需要验证微信返回的数据是否合法. 特别提醒:商户系统对于支付结果通知的内容一定 ...

  8. 微信小程序-统一下单、微信支付(Java后台)

    1.首先分享 微信统一下单接口: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1   微信接口 签名 对比网址: https: ...

  9. 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版

    一.微信公众号支付APIJS: 要完整的实现微信支付功能,需要前后端一起实现,还需要微信商户平台的配置.这里只是涉及服务端的代码. jar包:pom.xml <!-- ↓↓↓↓↓↓↓↓ 支付相关 ...

随机推荐

  1. C++ ADO连接

    #include "stdafx.h" #include <iostream> #include <iomanip> #include "wind ...

  2. 重学JAVA基础(五):面向对象

    1.封装 import java.util.Date; public class Human { protected String name; protected BirthDay birthDay; ...

  3. POCO库中文编程参考指南(10)如何使用TCPServer框架?

    1 TCPServer 框架概述 POCO 库提供TCPServer框架,用以搭建自定义的 TCP 服务器.TCPServer维护一个连接队列.一个连接线程池.连接线程用于处理连接,连接线程只要一空闲 ...

  4. spring cloud之简单介绍

    以下是来自官方的一篇简单介绍: spring Cloud provides tools for developers to quickly build some of the common patte ...

  5. DCloud-HTML5+:barcode

    ylbtech-DCloud:barcode&camera 1.返回顶部 1. http://www.html5plus.org/doc/zh_cn/barcode.html 2. Barco ...

  6. java的动态代理原理

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了.  ...

  7. Connection reset by peer的常见原因及解决办法

    转自:https://blog.csdn.net/xc_zhou/article/details/80950753 1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端 ...

  8. Codeforces 489A SwapSort (水题)

    A. SwapSort time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  9. HDU 1512 Monkey King (左偏树+并查集)

    题意:在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识 (认识具有传递性)的两只猴子之间.争斗时,两只猴子都 ...

  10. A Beginner's Guide to HTTP and REST

    http://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest--net-16340 Hypertext Transfer ...