Android 微信支付接入笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xufei5789651/article/details/77968148

我们在App移动开发中,支付功能基本都会遇到。前几天公司项目中有微信支付的功能,特此记录一下。本文基于AndroidStudio进行开发的。

第1步 阅读官方文档

微信官方文档
通过文档,我们要申请微信开发者平台和微信公众号要区别),对开发者资质进行认证。还有重要一点交费!!!

第2步 填写App基本信息,获取APPID

填写App信息时候,要注意下面几点:

  • 应用包名要保持一致.
    要确定填写应用包名和App项目配置文件AndroidManifest.xml中声明的package值、项目中build.gradle文件中applicationId都保持一致。
    build.gradle文件
    AndroidManifest.xml文件

  • 应用签名:32位的md5串(数字小写
    可以用微信签名工具获取md5值,也可以用keytool 命令进行编译查看md5值。重要一点:该处填写 release签名(后缀名.jks)。

请注意以上2点,否则,会导致调起支付报errCode=-1.

第3步 熟悉支付流程

具体看微信业务交互时序图,可以更好理解支付整个流程和逻辑。

第4步 支付SDK依赖

  • 在build.gradle文件中,添加如下依赖即可:
//下面依赖根据业务需要,任选其一
dependencies {
   //包含统计功能
   compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
   //不包含统计功能
   compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
  • 权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

第5步 配置AS工程

在项目中增加一个wxapi包名,同时必须有WXPayEntryActivity这个类名,否则无法调起微信支付。建议:WXPayEntryActivity直接从demo中copy过来,减少不必要的麻烦。同时,包名的路径和AndroidManifest.xml文件中WXPayEntryActivity配置如图:
包名的路径
WXPayEntryActivity配置

第6步 支付请求代码

  • 注册appId
    在需要调起支付Activity的onCreate()方法中进行注册appId.
 IWXAPI wxApi= WXAPIFactory.createWXAPI(context, null);
 wxApi.registerApp(appId);
  • 发起支付
public void getWXpayOrderInfo(WXPayBean wxPayBean) {
        PayReq req = new PayReq();
        //wxPayBean是根据服务器返回json数据生成bean实体对象
        req.appId = wxPayBean.getAppid();
        req.partnerId = wxPayBean.getMch_id();
        req.prepayId = wxPayBean.getPrepay_id();
        req.nonceStr = wxPayBean.getNonce_str();
        req.timeStamp = String.valueOf(wxPayBean.getTimestamp());
        req.packageValue ="Sign=WXPay";
        req.sign =CommonUtils.getSign(wxPayBean,req.timeStamp);
        //发起支付请求
        wxApi.sendReq(req);
    }
  • 注意: sign值 服务器端应该如下规则进行加密:
    签名算法

  • 调起支付接口参数说明
    参数说明

第7步 WXPayEntryActivity配置

public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {
    private IWXAPI api;

      @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = App.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 baseReq) {
    }
    @Override
    public void onResp(BaseResp resp) {
      if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
          switch (resp.errCode) {
             case BaseResp.ErrCode.ERR_OK://成功

              break;
            case BaseResp.ErrCode.ERR_USER_CANCEL://取消支付

              break;
             case BaseResp.ErrCode.ERR_COMM:// -1

             break;
          }
      }
   }
}

至此,支付接入流程已完成了。

支付接入注意点

  • 微信开放平台签名的问题
    只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本都可以调起支付成功。如果你使用debug签名,记得正式上线的时候,去微信开发平台改成release版本的签名(可能需要一段时间才会生效)。如果你使用release签名,不需要测试支付功能打包,在bulid.gradle文件加如下代码:
    release签名

  • 微信支付同一订单不会第二次跳到支付页面 提示支付失败,同一订单第二次支付的时候直接在请求遇支付订单的时候就会返回preayid为null。

  • 微信支付同一订单只能绑定一个价格,如果已经生成过则获取到的prepareid为null ,不可以调起支付。
展开阅读全文

没有更多推荐了,返回首页