微信支付功能--APP支付功能

JSON 2016-10-08 16:58:40 5005

微信APP支付

首先通过java服务端拼接支付参数发送请求到微信服务器,微信服务器会返回一个“prepay_id” 数值,然后通过prepay_id与一些其他属性生成一个MD5的签名,将签名信息返回给APP客户端,最后由APP客户端唤醒微信APP应用进行支付。

支付成功后,微信服务器会异步请求java服务器,告诉服务器该订单支付状态。

下单代码如下:

/**
	* @Title: appUnifiedorder
	* @Description: APP下单
	* @author pj
	* @date 2016年8月18日 下午3:37:23
	* @param notifyUrl
	* @param productName
	* @param orderNum
	* @param price
	* @param ipLocal
	* @return 
	*/
	public static Map<String,Object> appUnifiedorder(String mch_id, String appId,String notifyUrl,String productName,String orderNum,Double price,String ipLocal){
		
		Map<String,Object> map = new HashMap<String, Object>();
		//金额转为分单位
		Double expandPrice = price*100;
		//转int类型
		Integer totalFee = expandPrice.intValue();
		TreeMap<Object, Object> packageParams = new TreeMap<Object, Object>();
		packageParams.put("appid",appId);
		packageParams.put("mch_id",mch_id);//设置商户号
		packageParams.put("nonce_str",Sha1Util.getNonceStr());
		packageParams.put("body", productName); //商品描述   
		packageParams.put("out_trade_no", orderNum); //商户订单号  
		packageParams.put("fee_type","CNY"); 	  //银行币种
		packageParams.put("total_fee", totalFee); //商品总金额,以分为单位
		packageParams.put("spbill_create_ip",ipLocal); //订单生成的机器IP,指用户浏览器端IP
		packageParams.put("notify_url",notifyUrl); //通知地址  
		packageParams.put("trade_type", "APP");  //交易类型 
	 	try {
	 		//调用获取订单接口,并返回相关参数
			Map<String,Object> payMap = WXPrepay.submitXmlGetPrepayId(packageParams);
			String appid = payMap.get("appid").toString();
			String nonce_str = payMap.get("nonce_str").toString();
			String prepay_id = payMap.get("prepay_id").toString();
			String sign = "";
			String timeStamp = Sha1Util.getTimeStamp();
			//拼接自定义参数,并生成支付签名
			SortedMap<Object, Object> signParams = new TreeMap<Object, Object>();
			signParams.put("appid",appId);
			signParams.put("partnerid", mch_id);
			signParams.put("prepayid", prepay_id);
			signParams.put("package", "Sign=WXPay");
			signParams.put("noncestr", nonce_str);
			signParams.put("timestamp", timeStamp);
			sign = Sha1Util.createMD5Sign(signParams);
			//返回调用支付api所用的数据
		 	map.put("appId", appid);
		 	map.put("partnerId", mch_id);
		 	map.put("prepayId", prepay_id);
		 	map.put("packages", "Sign=WXPay");
		 	map.put("nonceStr", nonce_str);
		 	map.put("timeStamp", timeStamp);
		 	map.put("paySign", sign);
		} catch (Exception e) {
			e.printStackTrace();
			
		}
	 	
	 	
	 	return map;
	}

详细代码请查看WXUnifiedOrderUtil.java 文件,此代码仅供参考

业务流程图;

APP支付时序图

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

步骤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


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/181.html

转载时必须以链接形式注明原始出处及本声明。


附件下载:

备注:点击文件名下载,附件源来自云端,只能在本站下载。复制下载链接无效。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

相关文章
支付功能--PC端生成二维码,实现扫描支付功能
支付宝好友吱口令介绍,加好友吱口令获取图解
关于一位“caoz的梦呓”的大佬在公众号喷我的整体回复
在线新华字典有哪些功能
在线新华字典有哪些功能
如何查询域名是否被QQ或者拦截
Shiro 教程,Shiro教程0.2 下载,Shiro功能修复与升级说明。
关于weixin.com,价值3000万域名腾讯仲裁“0元”得手实际分析
javamail发和收信机制(smtp、pop3、imap)
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...