微信支付之h5网页支付

zcwxtd 9年前

来自: http://my.oschina.net/u/2385858/blog/607663


先简单说下微信公众号支付的流程首先获得code,然后获得openid,然后根据openid获取到预支付ID(prepay_id),获取到prepay_id,自然得到packages ,这个最难获得的参数获得之后,基本上就做好一半了,剩余的参数 appId 公众号id,timeStamp时间戳,nonceStr随机字符串,signType签名方式,paySign。

获取到这些参数后,新建一个页面,复制微信的代码 :

function onBridgeReady(){             WeixinJSBridge.invoke(                 'getBrandWCPayRequest', {                     "appId" : "wx2421b1c4370ec43b",     //公众号名称,由商户传入                          "timeStamp":" 1395712654",         //时间戳,自1970年以来的秒数                          "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串                          "package" : "prepay_id=u802345jgfjsdfgsdg888",                          "signType" : "MD5",         //微信签名方式:                          "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名                  },                 function(res){                          if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用  以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。                  }             );           }          if (typeof WeixinJSBridge == "undefined"){             if( document.addEventListener ){                 document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);             }else if (document.attachEvent){                 document.attachEvent('WeixinJSBridgeReady', onBridgeReady);                  document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);             }          }else{             onBridgeReady();        }

声明:以上代码为微信官方文档中,如使用,请到官方文档中复制

这样微信就会自动调用支付

1、调用微信支付一闪而过

微信的测试路径不对,进入公众号平台,检查测试路径,

如果使用的是测试路径,则必须将自己的公众号加入到测试白名单中

2、微信支付所需参数

appid 微信公众平台中的 基本配置中

appsecret 微信公众平台中的 基本配置中

partner 商户号

key 在商户平台下的账户设置api安全中。

3、在微信支付页面最好只要一些必要的东西,如果多了,可能会引起冲突。

4、开发前需要修改接口权限下的网页授权基本信息,填写测试的域名


2016-01-22

微信支付用到的方法

/**       * 元转换成分       * @param money       * @return       */      public static String getMoney(String amount) {          if(amount==null){              return "";          }          // 金额转化为分为单位          String currency =  amount.replaceAll("\\$|\\¥|\\,", "");  //处理包含, ¥ 或者$的金额            int index = currency.indexOf(".");            int length = currency.length();            Long amLong = 0l;            if(index == -1){                amLong = Long.valueOf(currency+"00");            }else if(length - index >= 3){                amLong = Long.valueOf((currency.substring(0, index+3)).replace(".", ""));            }else if(length - index == 2){                amLong = Long.valueOf((currency.substring(0, index+2)).replace(".", "")+0);            }else{                amLong = Long.valueOf((currency.substring(0, index+1)).replace(".", "")+"00");            }            return amLong.toString();       }      public String getIpAddr(HttpServletRequest request) {           String ip = request.getHeader("x-forwarded-for");           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getHeader("Proxy-Client-IP");           }           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getHeader("WL-Proxy-Client-IP");           }           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getRemoteAddr();           }           return ip;       }
/**       * 获取随机字符串       * @return       */      public static String getNonceStr() {          // 随机数          String currTime = TenpayUtil.getCurrTime();          // 8位日期          String strTime = currTime.substring(8, currTime.length());          // 四位随机数          String strRandom = TenpayUtil.buildRandom(4) + "";          // 10位序列号,可以自行调整。          return strTime + strRandom;      }
//获取ip地址  public String getIpAddr(HttpServletRequest request) {           String ip = request.getHeader("x-forwarded-for");           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getHeader("Proxy-Client-IP");           }           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getHeader("WL-Proxy-Client-IP");           }           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {               ip = request.getRemoteAddr();           }           return ip;       }