js api微信支付接口

登录微信公众管理平台,点微信支付,选开发配置,配置支付授权目录、测试目录,具体详情开发文档中都有,不过最最要注意的是测试时必须要用公众号把地址发给白名单微信号,确保能正确访问,当然开发前你得确保你公司已经申请完成对接流程

微信支付java版bug 报签名错误
1.requestHandler的init方法参数列表有问题,后两个参数位置要对调

2.md5加密的时候key值没有赋值,getKey 要返回 partnerkey

3.jspapi中signParams集合中的key值都要小写,它的noncestr大写导致签名无效

报参数错误

1,确保你的微信的app_id,app_secret,parent_id,parent_key,parent_sign_key的信息是否填写正确了。
2,请检查package的参数是否错误或为空等情况,具体设置可参考开发文档。
3,微信的金额是以分为单位的,所以请检查一下你传入的金额最小值是不是大于1(千万不要传小数点进去)。

回调类中,验证财付通签名不通过,原因:key值不正确,key值=PARTNER_KEY值

验证是否微信签名 不通过,,我选择直接跳过验证。。

java代码

public class WXPayController extends AbstractController {
 
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
            //=================================
            //jsapi接口
            //=================================
            //初始化
            RequestHandler reqHandler = new RequestHandler(request, response);
            TenpayHttpClient httpClient = new TenpayHttpClient();
            
            TreeMap<String, String> outParams = new TreeMap<String, String>();
             //初始化
            reqHandler.init();
            reqHandler.init(PropertiesUtil.getPropertyFromFile("APP_ID"),PropertiesUtil.getPropertyFromFile("APP_SECRET"),PropertiesUtil.getPropertyFromFile("APP_KEY"),PropertiesUtil.getPropertyFromFile("PARTNER_KEY"));
            
            Orders orders=orderMgr.getOrder(970374);
            //当前时间 yyyyMMddHHmmss
            String currTime = TenpayUtil.getCurrTime();
            //8位日期
            String strTime = currTime.substring(8, currTime.length());
            //四位随机数
            String strRandom = TenpayUtil.buildRandom(4) + "";
            //10位序列号,可以自行调整。
            String strReq = strTime + strRandom;
            //订单号,此处用时间加随机数生成,商户根据自己情况调整,只要保持全局唯一就行
            String out_trade_no = orders.getOrderNo();
            
            //获取提交的商品价格转化为分
            String order_price = String.valueOf(orders.getReadPrice().multiply(new BigDecimal(100)).intValue());
            //获取提交的商品名称
            String product_name ="huimeihui";
            
            //设置package订单参数
            SortedMap<String, String> packageParams = new TreeMap<String, String>();
            packageParams.put("banktype", "WX");  //支付类型    必填
            packageParams.put("body", product_name); //商品描述 必填  
            packageParams.put("fee_type","1");       //银行币种    必填
            packageParams.put("input_charset", "UTF-8"); //字符集
            packageParams.put("notify_url", PropertiesUtil.getPropertyFromFile("NOTIFY_URL")); //通知地址 必填
            packageParams.put("out_trade_no", out_trade_no); //商户订单号 必填
            packageParams.put("partner", PropertiesUtil.getPropertyFromFile("PARTNER")); //设置商户号 必填
            packageParams.put("spbill_create_ip", "101.231.125.118"); //订单生成的机器IP,指用户浏览器端IP 必填
            packageParams.put("total_fee", order_price); //商品总金额,以分为单位 必填
            
            //获取package包
            String packageValue = reqHandler.genPackage(packageParams);
            String noncestr = Sha1Util.getNonceStr();
            String timestamp = Sha1Util.getTimeStamp();
            
            //设置支付参数
            SortedMap<String, String> signParams = new TreeMap<String, String>();
            signParams.put("appid", PropertiesUtil.getPropertyFromFile("APP_ID"));
            signParams.put("noncestr", noncestr);
            signParams.put("package", packageValue);
            signParams.put("timestamp", timestamp);
            signParams.put("appkey", PropertiesUtil.getPropertyFromFile("APP_KEY"));
            
            //生成支付签名,要采用URLENCODER的原始值进行SHA1算法!
            String sign = Sha1Util.createSHA1Sign(signParams);
            System.out.println(sign);
            //增加非参与签名的额外参数
            signParams.put("paySign", sign);
            signParams.put("signType", "SHA1");
            StringBuffer sb = new StringBuffer();
            sb.append("{");
            sb.append("\"appId\":\"");sb.append(PropertiesUtil.getPropertyFromFile("APP_ID"));sb.append("\",");
            sb.append("\"timeStamp\":\"");sb.append(timestamp);sb.append("\",");
            sb.append("\"nonceStr\":\"");sb.append(noncestr);sb.append("\",");
            sb.append("\"package\":\"");sb.append(packageValue);sb.append("\",");
            sb.append("\"signType\":\"");sb.append("SHA1");sb.append("\",");
            sb.append("\"paySign\":\"");sb.append(sign);sb.append("\"");
            sb.append("}");
            log.PrintLogResult(sb.toString(), "wxpay");
            response.setContentType("application/json;charset=UTF-8");
            PrintWriter writer = response.getWriter();
            writer.write(sb.toString());
            writer.flush();
            writer.close();
        return null;
    }

我是把商户号什么的都配置在配置文件,这个可以按自己的需求该,加密什么的都是wx开发demo中的。

js代码:

<script>
function callpay(){
if (typeof WeixinJSBridge == "undefined") {
alert("请先通过微信访问!");
} else {
$.getScript("http://域名/wxap/getwxpay/",function(){
WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId":jobj.appId,
"timeStamp":jobj.timeStamp,
"nonceStr":jobj.nonceStr,
"package" : jobj.package,
"signType" : jobj.signTupe,
"paySign" : jobj.paySign
},function(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code + res.err_desc + res.err_msg);
});
});
}
}
</script>

我已经对接成功了,希望大家也顺利接通。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值