接入微信支付

作者: 你的益达233 | 来源:发表于2019-10-06 13:35 被阅读0次

接入微信支付相对支付宝支付要麻烦些,它和包名,签名有关。更让人难以理解的是类名和类所在的包名都是规定好的,不能改的,一改你就调不起微信支付。

包名和应用签名的获取

包名:build.gradle文件中的applicationId而不是AndroidManifest.xml中的package。以后凡是说到包名都是applicationId。

应用签名的获取:因为项目的app都是用360加固的,360加固上在加固应用时在任务详情可以看到,签名md5就是,它是大写的,你弄成小写就是了
如下图:

}AVUQMP~Z6BS1~TA0K@H%5P.png

万一填错了也可以改的,好像要等1天才能修改成功

依赖以及相关配置

在app下build.gradle文件中,添加如下依赖即可

    dependencies {

compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

}

在Application中初始化先向微信注册您的APPID

private void initWxPay() {
    //初始化微信api
    wxapi = WXAPIFactory.createWXAPI(this, WxPayUtils.getWxAppId(), false);
    //注册appid
    wxapi.registerApp(WxPayUtils.getWxAppId());
}

调起微信支付

示例代码:

public static void wxPay(Context context, final String prepqyId) {
    if (MyApplication.getWxapi().isWXAppInstalled()) {
        Thread payThread = new Thread() {
            @Override
            public void run() {
                PayReq request = new PayReq();
                request.appId = WxPayUtils.getWxAppId();
                request.partnerId = WxPayUtils.getWxMchId();
                request.prepayId = prepqyId;
                request.packageValue = "Sign=WXPay";
                request.nonceStr = WxPayUtils.getNumSmallLetter();
                request.timeStamp = (System.currentTimeMillis() / 1000) + "";
                SortedMap<String, String> map = new TreeMap<>();
                map.put("appid", request.appId);
                map.put("partnerid", request.partnerId);
                map.put("prepayid", request.prepayId);
                map.put("package", request.packageValue);
                map.put("noncestr", request.nonceStr);
                map.put("timestamp", request.timeStamp);
                request.sign = WxPayUtils.createMD5Sign(map);
                MyApplication.getWxapi().sendReq(request);
            }
        };
        payThread.start();
    } else {
        ToastUtils.show(context.getString(R.string.wx_unInstalled));
    }


}

public static String createMD5Sign(SortedMap<String, String> map) {
    StringBuilder sb = new StringBuilder();
    Set es = map.entrySet();
    Iterator it = es.iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        String k = (String) entry.getKey();
        String v = (String) entry.getValue();
        sb.append(k + "=" + v + "&");
    }
    String params = sb.append("key=" + getWxSignKey()).substring(0);
    String sign = MD5Encode(params, "utf8");
    sign = sign.toUpperCase();
    return sign;
}

其中getWxAppId是申请的appId,getWxMchId是商户号,在微信支付后面查看详情中可查看
createMD5Sign()方法是接口给的,就是和接口一样的,可以问下服务器端同事。其中getWxsignKey也是接口给或者是申请微信支付的人弄的,它是用来加密各个请求的参数的,它必须和接口用的是一样的。这个我也不知道在那查看

处理支付结果回调

建WXPayEntryActivity类,目录结构示例如下:


)C1Z(@OA}PMXKH)8VM8X_07.png
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {


private IWXAPI api;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    api = MyApplication.getWxapi();
    api.handleIntent(getIntent(), this);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    api.handleIntent(intent, this);
}

@Override
public void onReq(BaseReq req) {
}

@Override
public void onResp(BaseResp resp) {

    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
    //errCode为0是支付成功,其他都是失败
        if (resp.errCode == WxPayUtils.PAY_SUCCESS_CODE) {
            //支付成功
            LogUtils.v("wxpayy", "支付成功");
            //去后台查询订单结果
        } else {
            //支付失败
            LogUtils.v("wxpayy", "支付失败");
            LogUtils.v("wxpayy", resp.errCode + "/");
            //根据错误code排查问题
        }
    }
    finish();
}}

注意

resp.errCode为-1肯定是配置问题,不用怀疑

调不起微信支付问题排查

  1. 签名的文件是否和申请时的一致,debug时是否用上了签名文件
  2. appId,商户号,request.sign是否和接口用的一样
  3. WXPayEntryActivity建的目录结构是否正确,是否真的是该包名路径下建的,类名不能错

换包名该如何修改

1、其实很简单,WXPayEntryActivity类的目录得建对。如下图所示

7NHW7VRTZ9~9}(ZEK98SAFT.png

2、appId,商户号,request.sign得换新的
3、修改applicationId,修改签名文件

如果发现调不起微信支付或者修改包名之后有问题可以加群142739277或者我的QQ:893151960

相关文章

  • 集成微信支付遇见坑

    一、微信支付,首先利用CocoaPods,导入微信支付SDK pod 'WechatOpenSDK' 注意:导入重...

  • 接入微信支付

    接入微信支付相对支付宝支付要麻烦些,它和包名,签名有关。更让人难以理解的是类名和类所在的包名都是规定好的,不能改的...

  • 公众平台接入商户功能篇

    接入微信支付功能——商户功能 微信支付,提供用户身份识别、微信地址共享、支付结算、客户关系维护、售后维权、交易统计...

  • 微信小程序支付开发具体流程

    申请微信支付小程序认证后进入微信支付申请小程序的微信支付实战:微信小程序支付开发具体流程 填写企业信息对公账户并上...

  • android 微信 支付 接入流程总结

    [TOC] 客户端微信支付 android 接入微信指南android 资源下载页微信支付 开发文档 登录微信官方...

  • 微信支付申请不通过的解决方法

    在移动支付巨大的市场下,微信支付当前非常流行,在网站上集成一个微信支付方式,通过接入微信支付功能,用户可以在微信公...

  • Android接入微信支付

    1、先在微信开放平台申请开发应用,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平...

  • 接入微信sdk支付

    1、在微信开放平台申请app_id,app_key(差不多一个周才会通过审核)app_id,app_key2、开发...

  • App接入微信支付

    一、产品接入 第一步:注册开放平台账号登录开放平台(open.weixin.qq.com),注册成为微信开放平台开...

  • Android 接入微信支付

    前言: 参考地址(做的时候有参考了以下两个博客的内容,自己按照实际情况,简化了些东西): https://gith...

网友评论

    本文标题:接入微信支付

    本文链接:https://www.haomeiwen.com/subject/tcyupctx.html