关于微信PC扫码支付
来源:互联网 发布:linq 修改数据 编辑:程序博客网 时间:2024/06/10 10:31
关于微信PC扫码支付
扫码支付 有两种模式 官网有说 这里采用简单明白的模式2
前期准备
1 需要公众号 开通了微信支付权限
2 需要微信支付商户平台账号
服务器生成订单号
发送请求 https://api.mch.weixin.qq.com/pay/unifiedorder ;
参数是xml 例如:
把 code_url 丢到页面上去
jsp
<img alt="请扫描微信支付二维码" src="/weixinPay/qrcode?codeUrl=${codeUrl }">
java
参考: 发xml的post请求
扫码
前期准备
1 需要公众号 开通了微信支付权限
2 需要微信支付商户平台账号
服务器生成订单号
发送请求 https://api.mch.weixin.qq.com/pay/unifiedorder ;
参数是xml 例如:
String xml = "<xml>" + "<appid>" + appid + "</appid>" + "<mch_id>" + mch_id + "</mch_id>" + "<nonce_str>"
+ nonce_str + "</nonce_str>" + "<sign>" + sign + "</sign>" + "<body><![CDATA[" + body + "]]></body>"
+ "<out_trade_no>" + out_trade_no + "</out_trade_no>" + "<total_fee>" + order_price + "</total_fee>"
+ "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>" + "<notify_url>" + wechatNotifyUrl
+ "</notify_url>" + "<trade_type>" + trade_type + "</trade_type>" + "</xml>";
然后微信会返回参数回来 如果参数code_url 正常就最好了,这个能拿来生成支付二维码把 code_url 丢到页面上去
jsp
<img alt="请扫描微信支付二维码" src="/weixinPay/qrcode?codeUrl=${codeUrl }">
java
@RequestMapping(value = "/weixinPay/qrcode")
public void wechatQrcodePay(HttpServletResponse response, String codeUrl) {
GenerateQrCodeUtil.encodeQrcode(codeUrl, response);
}
扫码支付就完成了
扫码完成后 为了让服务器有反应 微信会 访问wechatNotifyUrl这个地址 告诉服务器 扫码完成 付款成功了,你可以继续后面的业务流程了
所以扫码页面开个长连接 体验应该会更好些 ,,我是不太擅长咯 而且测试的时候没有正常把wechatNotifyUrl 用起来 所以只好略过用了其它的方式 就是交易查询订单
查询订单
页面挂个定时器 定时发请求到服务器去,让服务器去查https://api.mch.weixin.qq.com/pay/orderquery
参数也是xml
注: 微信收钱只收整数,同时单位是分....
以上就是扫码的全部内容扫码支付就完成了
扫码完成后 为了让服务器有反应 微信会 访问wechatNotifyUrl这个地址 告诉服务器 扫码完成 付款成功了,你可以继续后面的业务流程了
所以扫码页面开个长连接 体验应该会更好些 ,,我是不太擅长咯 而且测试的时候没有正常把wechatNotifyUrl 用起来 所以只好略过用了其它的方式 就是交易查询订单
查询订单
页面挂个定时器 定时发请求到服务器去,让服务器去查https://api.mch.weixin.qq.com/pay/orderquery
参数也是xml
String xml = "<xml>" + "<appid>" + appid + "</appid>" + "<mch_id>" + mch_id + "</mch_id>" + "<nonce_str>"
+ nonce_str + "</nonce_str>" + "<sign>" + sign + "</sign>" + "<out_trade_no>" + out_trade_no+"</out_trade_no>"
+"</xml>";
如果参数无误 正常微信会返回三种情况
1 还没付钱呢,别急
2 嗯收到钱了,恭喜发财,
3 吵什么吵,早就收到钱了 不是告诉你了么
捕获到第二种情况就可以继续跑业务了 顺便再页面弹个框什么的 告诉用户付款成功
如果参数无误 正常微信会返回三种情况
1 还没付钱呢,别急
2 嗯收到钱了,恭喜发财,
3 吵什么吵,早就收到钱了 不是告诉你了么
捕获到第二种情况就可以继续跑业务了 顺便再页面弹个框什么的 告诉用户付款成功
注: 微信收钱只收整数,同时单位是分....
参考: 发xml的post请求
public static String httpPostXml(String url, String xml) {
// post请求返回结果
String str = "";
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost method = new HttpPost(url);
try {
// 解决中文乱码问题
StringEntity entity = new StringEntity(xml, "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
method.setEntity(entity);
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url, "UTF-8");
/** 请求发送成功,并得到响应 **/
if (result.getStatusLine().getStatusCode() == 200) {
try {
/** 读取服务器返回过来的json字符串数据 **/
str = EntityUtils.toString(result.getEntity(), HTTP.UTF_8);
} catch (Exception e) {
logger.error("post请求提交失败:" + url, e);
}
}
} catch (IOException e) {
logger.error("post请求提交失败:" + url, e);
}
return str;
} 扫码
public static void encodeQrcode(String content, HttpServletResponse response) {
if (content.trim().length()==0)
return;
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符集编码类型
BitMatrix bitMatrix = null;
try {
bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 300, 300, hints);
BufferedImage image = toBufferedImage(bitMatrix);
// 输出二维码图片流
try {
ImageIO.write(image, "png", response.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (WriterException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} 0 0
- 关于微信PC扫码支付
- 微信支付-扫码支付备忘
- 微信支付扫码支付
- PC端 微信支付 扫码之后页面跳转处理
- 第三方支付之微信支付(扫码支付)
- 微信native扫码支付
- 微信开发之扫码支付
- 关于ASP微信支付之扫码支付的补充
- 微信支付—— 扫码支付
- ASP微信支付之扫码支付
- 微信支付——扫码支付模式二
- 微信支付--扫码支付模式二实现
- 微信支付接入流程——扫码支付
- ThinkPHP之微信支付(扫码支付)
- PHP微信支付之扫码支付
- 微信和支付宝的被动扫码支付
- 关于微信原生支付(扫码支付)的两种支付模式的理解和比较...
- 关于微信原生支付(扫码支付)的两种支付模式的理解和比较
- GO语言学习:GoEclipse配置
- ZOJ-3328-Wu Xing【7th浙江省赛】
- 【CSS3】结构性伪类选择器—empty
- Django学习随手记(三)
- 制作sig文件
- 关于微信PC扫码支付
- php的memcache和memcached扩展区别
- 关于目前自己iOS项目使用的第三方开源库
- L0,L1,L2正则化浅析
- 韩顺平 javascript教学视频_学习笔记28_dom对象(document对象) 最重要的
- ecplise遇到You must restart adb and Eclipse.Please ensure that adb is correctly located at的问题
- 将各种格式flv,avi,mp4等的文件,转码成MP4(无音频)
- 降低oracle高水位线方法总结(包括验证结果)
- android startService小例子