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

信息发布:Mr.Peng 发布日期:2016-10-08 16:58 热度:318 分享到:

微信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


附件下载

weChat.rar

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

本文主题

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

¥我需要走的更远,点击我 赞助。 如果还有疑问,点击我加群,为你提供最好的解答。


工具导航地图

 
Nodejs + socket Demo 赞助二维码 赞助名单 百度口碑点赞 查看QQ群美女帅哥 点击加QQ群 听音乐 开启弹幕 X
反馈意见