微信java版_JAVA版微信支付V3-完全版

本文详细介绍了如何使用JAVA实现微信支付V3版本,包括开发配置、参数设置、签名生成、XML数据处理及回调通知。内容涵盖微信支付接口调用、版本判断、错误处理等关键步骤。
摘要由CSDN通过智能技术生成

本人做的是微信V3版本的微信支付,也是目前最新的微信支付接口。官方文档下载地址

微信支付成功后  你的邮件会有以下信息:

1、 信息包括:商户ID(mch_id)、申请编号、登录帐号、登录密码、商户API密码(key)

2.、证书包括:商户API证书、证书密钥、CA证书

开发前,我们先登录自己的服务号,点击微信支付----->开发配置。

51024156_1

如果这里的授权路径和下面参数的notify_url不对  调用付款接口时会弹出access_denied。

比如,我的授权目录是http://183.33.212.175/wxweb/config/,那么我对应的notify_url的回调方法必须是String notify_url = "http://183.33.212.175:8016/wxweb/config/pay!paySuccess.action";这样的

下图是微信支付JSAPI支付方法的流程图。

51024156_2

登陆Oauth2授权的问题,我会另外写篇博客。在此略过。需要注意一点的是,微信支付是微信5.0以上版本才能支持,所以,可能有些用户的微信版本是低版本无法进行微信支付而用户又不知道为什么就是不能支付,我们需要进行一个版本判断,如果用户的微信版本低于5.0就告知用户一些提示信息。那么,如何判断用户的微信版本是多少呢?我们可以通过这个方法可以获取一些信息然后进行判断:request.getHeader("user-agent")获取信息。

以 iPhone 版本为例,可以通过 user agent 可获取如下微信版本示例信息:

"Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0"

其中 5.0 为用户安装的微信版本号,商户可以判定版本号是否高于或者等于 5.0。具体判断代码请留意后面代码。

流程图中,我们看到需要先调用一次统一接口,然后微信会返回一个prepayId给我们。那么我们先来调用统一接口。调用接口的URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder,调用统一接口需要以下参数。

51024156_3

51024156_4

看到这些参数,不难理解需要传入什么。那么参数中的sign需要以下规则进行生成。

51024156_5

下面是我生成sign的方法。注意,参数是必填项的必须加进去。sign的生成规则是,除了上除列表中sign字段为所有的参数都可以参与sign的生成且参与生成sign的参数值不为空.

/**

* @author 李欣桦

* @date 2014-12-5下午2:29:34

* @Description:sign签名

* @param characterEncoding 编码格式

* @param parameters 请求参数

* @return

*/

public static String createSign(String characterEncoding,SortedMap parameters){

StringBuffer sb = new StringBuffer();

Set es = parameters.entrySet();

Iterator it = es.iterator();

while(it.hasNext()) {

Map.Entry entry = (Map.Entry)it.next();

String k = (String)entry.getKey();

Object v = entry.getValue();

if(null != v && !"".equals(v)

&& !"sign".equals(k) && !"key".equals(k)) {

sb.append(k + "=" + v + "&");

}

}

sb.append("key=" + ConfigUtil.API_KEY);

String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();

return sign;

}

MD5Util工具类中相关的方法

public class MD5Util {

private static String byteArrayToHexString(byte b[]) {

StringBuffer resultSb = new StringBuffer();

for (int i = 0; i < b.length; i++)

resultSb.append(byteToHexString(b[i]));

return resultSb.toString();

}

private

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值