微信支付方式集成(二)
来源:互联网 发布:java rowurlencode 编辑:程序博客网 时间:2024/05/17 15:20
本篇介绍微信支付方式的model 2
先来回顾一下model 2的流程:
1、顾客下单后点击微信支付
2、商户后台系统根据订单生成交易参数,并以XML的格式发送到统一下单API
StringBuffer xml = new StringBuffer(); xml.append("<xml>"); xml.append("<appid>XXXXXXXXXX</appid>"); xml.append("<attach>微信支付</attach>"); xml.append("<body>test</body>"); xml.append("<mch_id>XXXXXXXXXX</mch_id>"); xml.append("<nonce_str>" + nonceA + "</nonce_str>"); xml.append("<notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url>"); xml.append("<out_trade_no>123</out_trade_no>"); xml.append("<product_id>123</product_id>"); xml.append("<spbill_create_ip>127.0.0.1</spbill_create_ip>"); xml.append("<total_fee>1</total_fee>"); xml.append("<trade_type>NATIVE</trade_type>"); xml.append("<sign>" + signA + "</sign>"); xml.append("</xml>");
appid和mch_id分别为自己公司的应用ID和商户号
attach是一个字符串,会原样返回,没什么实际作用
body是商品信息,扫码成功到支付页面后会显示body的内容,但是body长度是String 32,别超长了
nonce_str是随机字符串,一下是生成随机字符串的方法:
private static String getNonce() { final String base = "abcdefghijklmnopqrstuvwxyz0123456789"; final Random random = new Random(); final StringBuffer sb = new StringBuffer(); for (int i = 0; i < 32; i++) { final int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); }
notify_url是回调URL,用于接收异步回调返回的交易结果
out_trade_no是订单号
product_id在NATIVE这种支付方式下必传,我也把他定义成订单号,
spbill_create_ip是产生订单的IP
total_fee是订单价格也是以分为单位
trade_type是交易类型,扫码支付就写NATIVE
sign是签名,下面是签名生成算法
final String nonceA = getNonce(); final String stringA = "appid=XXXXXXXX" + "&attach=微信支付" + "&body=test" + "&mch_id=XXXXXXX" + "&nonce_str=" + nonceA + "¬ify_url=http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php" + "&out_trade_no=123" + "&product_id=123" + "&spbill_create_ip=127.0.0.1" + "&total_fee=1" + "&trade_type=NATIVE"; final String stringSignTemp = stringA + "&key=" + key; final String signA = MD5Util.MD5Encode(stringSignTemp, "UTF-8").toUpperCase();
StringA的最后把key,也就是密钥填写上去,调用MD5加密算法就OK,加密算法这里就不贴出来了。
下面用org.apache.commons.httpclient.methods.PostMethod去POST统一下单API
https://api.mch.weixin.qq.com/pay/unifiedorder
最后把返回结果用IO流输出:
<xml><return_code><![CDATA[SUCCESS]]></return_code>。。。。。。。。。。中间省略<code_url><![CDATA[weixin://wxpay/bizpayurl?sr=]]></code_url></xml>
3、根据code_url中的内容,也就是weixin://wxpay/bizpayurl?sr=XXXX生成二维码
4、扫码即可支付
5、支付成功后微信会将结果返回到notify_url处,该URL需要接收回调参数,参数名为result_code就是交易类型,SUCCESS表示交易成功,FAILED表示交易失败。
6、修改商户系统的订单状态
重点内容
以上参数都为必传参数
签名生成后需要转换成大写,toUpperCase
数据传输和接收格式都是XML
- 微信支付方式集成(二)
- 微信支付方式集成(一)
- 支付宝,微信支付方式集成
- iOS 支付宝和微信支付方式集成详解+(demo)
- 微信支付集成
- 微信支付集成
- 集成微信支付
- 微信支付集成
- 微信支付集成
- 微信支付(二)
- android集成微信支付(全是坑)
- Android支付(支付宝,微信,银联)集成使用
- 记录自己的支付集成(微信&支付宝)
- ThinkPHP集成App支付(微信,支付宝)
- iOS之微信支付(二)——本地生成订单集成详情
- android集成微信支付
- android集成微信支付
- 微信支付功能集成
- java中的异常
- 《Scala编程》学习笔记(17~18章)
- 在ecliplse中导入已有web项目(也是用ecliplse进行编写的)
- 配置管理数据库元数据文件
- Android错误之ListView加载错位_ListView图片错位
- 微信支付方式集成(二)
- 华为OJ2288-合唱队(最长递增子序列)
- android退出程序 后台运行 实现退出键和home键一样的效果
- BZOJ1030 [JSOI2007]文本生成器【AC自动机+DP】
- POJ 1308 Is It A Tree? && NYOJ 129 (树的判定+并查集)
- C语言程序题目--闰年判断,三边能否构成三角形
- 16. 程序员生存定律--表达背后的力量(1)
- Unity动态加载文本数据的方法
- rdlc报表表达式应用(字符串和转换)