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

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. 使用google浏览器模拟手机终端的方法

    谷歌Chrome浏览器,可以很方便地用来当移动终端模拟器.在Windows的[开始]-->[运行]中输入以下命令,启动谷歌浏览器,即可模拟相应手机的浏览器去访问3G手机网页,前提:将先前开启的谷 ...

  2. ACM学习历程—HDU 1276 士兵队列训练问题(队列)

    Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠 拢,再从头开始进行一至三报数,凡 ...

  3. bzoj 2626: JZPFAR k-D树

    题目大意: 平面上n个点,每次给出一个点,求这个点的k远点 题解: 什么叫做k远点呢... 1 2 3 4 5中5是第一远,4是第二远... 看来我语文学的不好 那么我们直接上k-D Tree求k邻近 ...

  4. Microsoft SQL Server 数据库

    1. master 数据库 master 数据库记录 SQL Server 系统的所有系统级别信息.它记录所有的登录帐户和系统配置设置.master 数据库是这样一个数据库,它记录所有其它的数据库,其 ...

  5. SimpliciTI使用

    SimpliciTI组网过程介绍 1.SimpliciTI支持点对点和星形的网络拓扑结构.   下面介绍以AP为中心的SimpliciTI网路协议的星形拓扑结构通信过程 1)当ED节点上电之后就扫描信 ...

  6. oracle 查询及删除重复记录的SQL语句

    查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group ...

  7. c# dll自动注册

    在网上看到一个c# dll自动注册的文章,我测试了一下,可用. 下面是具体代码 [DllImport("Ry4SCom.dll")] public static extern in ...

  8. 自定义TabWidget

    在开发过程中,默认的TabWidget不能满足我们对于UI的要求并且没有足够的属性工我们去修改,这个时候能够自定义TabWidget是非常必要的.自定义TabWidget组要运用的是TabSpec.s ...

  9. JavaScript中两个数组的拼接

    方法一:使用for循环 var arr = ['tom', 'jerry']; var arr2 = [1, 2]; for(var i=0; i<arr2.length; i++){ arr. ...

  10. Unity手游之路自动寻路Navmesh之入门

    http://blog.csdn.net/janeky/article/details/17457533 现在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能 ...