微信网页支付之H5支付

公众号等相关配置请参考博客:微信支付详解.


	//	▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼		H5支付配置参数		▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
	
	//微信H5支付类型
	public static String h5_trade_type=ResourceBundle.getBundle("wpay").getString("h5_trade_type");

	//微信H5网页支付成功回调页
	public static String redirect_url = PathUtil.GetDemain()+ ResourceBundle.getBundle("wpay").getString("redirect_url");

	//异步通知地址
	public static String wy_notify_url = PathUtil.GetDemain()+ResourceBundle.getBundle("wpay").getString("wy_notify_url");

	//公众账号id
	public static String gz_id = ResourceBundle.getBundle("wpay").getString("gz_id");
	
	//公众号对应绑定的商户号id
	public static String gz_mch_id = ResourceBundle.getBundle("wpay").getString("gz_mch_id");

	//H5使用商户号对应商户平台 Api key密钥
	public static String WYKey = ResourceBundle.getBundle("wpay").getString("WYKey");

	/**
	 * 商品描述交易字段格式根据不同的应用场景按照以下格式:
	 * APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
	 */
	public static String body = "开通正式版";
	
	//客户端ip,固定为此值
	public static String spbill_create_ip = "127.0.0.1";
	
	//支付类型  固定值 APP
	public static String trade_type = "APP";
	
	//固定值 Sign=WXPay
	public static String PACKAGE = "Sign=WXPay";
	
	//微信统一下单接口请求地址   固定值
	public static String wxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
	
	//	▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲		H5支付配置参数		▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

	/**
	 * 微信H5支付
	 * 用户选择需要购买的产品点击微信支付 处理自身业务 然后向微信发起下单请求(统一下单接口)
	 * 1、用户在商户侧完成下单,使用微信支付进行支付
	 * 2、由商户后台向微信支付发起下单请求(调用统一下单接口)注 trade_type=MWEB
	 * @param request
	 * @param uid	用户ID
	 * @param cid	套餐ID
	 * @param map	返回页面的数据 map承装
	 * @return	map
	 * @throws IOException 异常
	 */
	@RequestMapping("getwyorder")
	public void wx_PayBefore(HttpServletRequest request,HttpServletResponse response,String uid,String cid,Map<String,Object> map) throws IOException{
   
		log.info("uid=============="+uid);
		Users p = users.FindUsers(uid);
		if(p!=null){
   
			StringBuilder mweb_url = new StringBuilder();
			Combo token = com.findcomboById(cid);
			String ip = request.getRemoteAddr();
			log.info("ip:"+ip);
			//重点 处理自身业务 然后调用统一下单生成预支付交易信息 通过mweb_url发起微信支付
			//即对应文档中:
			// 1、用户在商户侧完成下单,使用微信支付进行支付
			// 2、由商户后台向微信支付发起下单请求(调用统一下单接口)
			Map<String,Object> map_wy = wxPayService.beforePayTwo(uid, cid,ip);

			if(map_wy!=null){
   
				
				if(map_wy.get("mweb_url")!=null){
   
					mweb_url.append(map_wy.get("mweb_url"));
					//正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数
					//注意:
  					//1.需对redirect_url进行urlencode处理
				  	//2.由于设置redirect_url后,回跳指定页面的操作可能发生在:
			  		//  1,微信支付中间页调起微信收银台后超过5秒
			  		//  2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,
			  		//    所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。
					mweb_url.append("&redirect_url="+URLEncoder.encode(WxPayConfig.redirect_url+"?str="+map_wy.get("order_id"), "UTF-8"));
					log.info("=============="+mweb_url);
					//3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页 
					//4、中间页进行H5权限的校验,安全性检查
					//此处为了体验度没有直接跳转页面 正确的步骤是将 mweb_url 参数携带跳转到一个页面 ,在该页面点击支付请求mweb_url地址
					response.sendRedirect(mweb_url+"");
				}
			}
		}
	}
	
	
	/**
	 * H5微信支付-回调页面 用户支付完成后返回至指定页面
	 * 正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数 
	 * 需对redirect_url进行urlencode处理
	 * 6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)
	 * 7、商户在展示页面,引导用户主动发起支付结果的查询
	 * @param str 订单号
	 * @return
	 */
	@RequestMapping("wx_wy_after")
	public String wx_yw_after(String str,Map
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值