您的位置:首页 > 移动开发 > 微信开发

js api微信支付接口

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

微信支付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.er
4000
r_desc + res.err_msg);

});

});

}

}

</script>

我已经对接成功了,希望大家也顺利接通。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息