Android调用微信支付(包含java后台)

前言:

这几天做微信支付功能,第一次做支付功能,踩了好多的坑,写这文章,警示自己不要再次犯错,也给其它的开发者提供思路及解决的方法。前台android与后台的java都是自己做的,所以,该踩的坑都踩了。哈哈!

一、java后台代码

    

1.1、后台请求

关键是PayUtil中的wxPayObject()方法。

/**
	 * 获取微信支付信息
	 */
	@RequestMapping("/getWeiXinPayMessage")
	@ResponseBody
	public Object getWeiXinPayMessage(HttpServletRequest request) {
		BxRecordParams params = SystemUtil.getInstance().getCommonParams(BxRecordParams.class, request);
		Integer userId;// 用户id
		Integer fid; // 分公司id
		Integer type; // 支付类型
		Integer clientType; 
		if (null == params || null == (userId = params.getUserId()) || 0 == userId || null == (fid = params.getFid())
				|| 0 == fid || null == (clientType = params.getClientType()) || !clientTypeList.contains(clientType)
				|| null == (type = params.getType()) || !payTypeList.contains(type)) {
			return new ArdRestResponse(ArdEnum.UNSUCCESS_USID.code(), ArdEnum.UNSUCCESS_USID.message(), null);
		}
		WeiXinPay weixin = new WeiXinPay();
		if (1 == clientType) {
			// 表示客户端
			if (0 == type) {
				// 表示为支付类型为订单
				// 需要检查订单状态及支付的状态
				Integer orderId = params.getOrderId();
				if (null == orderId) {
					return new ArdRestResponse(-1, "订单号不存在,请重试!", null);
				}
				Order order = orderMapper.load(orderId);
				if (null == order) {
					return new ArdRestResponse(-1, "该订单不存在,请重试!", null);
				}
				boolean flag = false;//存在标记
				List<PaymentHistory> payList = paymentHistoryMapper.getPayListForOrderId(orderId);
				if (null != payList && payList.size() > 0) {
					for(int i = 0; i < payList.size(); i++) {
						PaymentHistory paymentHistory = payList.get(i);
						if(null != paymentHistory && "1".equals(paymentHistory.getStatus())) {
							return new ArdRestResponse(88, "该订单已支付", null);
						}
					}
				}
				String orderNo = order.getOrderNo();
				/*
				* 这里要注意下,
				  微信后台总是返回 订单号重复,所以,要添加订单号后面添加"_" + 随机数,
				  这样每次请求的订单号就不同了
				*/
				String randomCode = orderNo + "_" +Util.getRandomStringByLength(5);
				double yfhj = order.getYfhj();
				//关键代码,请求微信后台地址(其它的是我的业务代码,大家可以忽略)    主要是返回预付款id,也就是微信文档中的统一下单    费用单位是分,必须是整数
				Map<String, String> result = PayUtil.wxPayObject(request, WXConst.PAY_CUSTOMER_APP_ID,
						WXConst.PAY_MERCHANT_NUMBER, WXConst.PAY_PRIVATE_KEY, "订单费用",  randomCode, ((int) (1000 * yfhj)));
				String mch_id, prepay_id, appid, nonce_str, sign;
				if (null != result && "success".equals(result.get("status"))
						&& !StringUtils.isEmpty(prepay_id = result.get("prepay_id"))
						&& !StringUtils.isEmpty(appid = result.get("appid"))
						&& !StringUtils.isEmpty(nonce_str = result.get("nonce_str"))
						&& !StringUtils.isEmpty(sign = result.get("sign"))
						&& !StringUtils.isEmpty(mch_id = result.get("mch_id"))) {
					weixin.setAppid(appid);
					weixin.setMerchantNumber(mch_id);
					weixin.setPrepaidMoneyId(prepay_id);
				
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端H5调用微信支付支付是一种简单方便的支付方式。用户在网页中选择微信支付支付后,会被引导到微信支付宝的支付页面,输入支付密码或确认支付即可完成支付。对于商家来说,只需在网页中添加相应的支付接口和配置相关信息,就可以实现H5调用微信支付支付功能。这种支付方式适用于各类移动端应用,如电商平台、小程序、线下商户等。 在实现H5调用微信支付支付的过程中,需要注意保障支付安全和用户隐私。商家需要通过微信支付宝的官方平台获得相关权限和密钥,确保支付接口的可信性和安全性。同时,还需要遵守相关的法律法规和隐私政策,保护用户的个人信息和支付数据。另外,商家还可以通过设置不同的支付方式、优惠券等方式来吸引用户,提高支付转化率和用户满意度。 在移动端H5调用微信支付支付的过程中,还需要考虑支付的实时性和用户体验。商家需要保证支付的及时性和可靠性,避免因网络延迟或其他原因导致支付失败或出现异常情况。同时,还需要考虑用户的支付习惯和支付环境,提供简洁明了的支付流程和友好的界面设计,提高用户支付的便捷性和舒适度。通过合理规划和技术实现,移动端H5调用微信支付支付可以成为一种便捷、安全、高效的支付方式,为用户和商家带来更好的支付体验和商业价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值