微信支付接入流程

Posted by lizubing1992 on 03-01,2019

接入方式和微信登录有点类似

配置三方库

 api 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.3.1'

2.配置权限

<uses-permission android:name="android.permission.INTERNET"/>

<activity
      android:name=".wxapi.WXPayEntryActivity"
      android:exported="true"
      android:launchMode="singleTop">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:scheme="wx_appid" />
      </intent-filter>
    </activity>

wx_appid填入微信开放平台的appid

WXPayEntryActivity必须在包名.wxapi包下,微信登录的WXEntryActivity类似

3.下订单

订单生成都是后台生成的,调用具体的后会返回对应的数据
主要需要的数据为

    IWXAPI api = WXAPIFactory.createWXAPI(mActivity, null);
    api.registerApp(Constant.WEIXIN_APP_ID);
    PayReq req = new PayReq();
    req.appId = entity.getAppid();//你的微信appid
    req.partnerId = entity.getPartnerid();//商户号
    req.prepayId = entity.getPrepayid();//预支付交易会话ID
    req.nonceStr = entity.getNoncestr();//随机字符串
    req.timeStamp = entity.getTimestamp();//时间戳
    req.packageValue = entity.getPackageX();//扩展字段,这里固定填写Sign=WXPay
    req.sign = entity.getSign();//签名
    api.sendReq(req);

如果配置正确基本就能吊起微信支付的界面了
之后会回调到WXPayEntryActivity界面

4. WXPayEntryActivity支付回调处理

public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

  private IWXAPI api;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wxpay_entry);
    api = WXAPIFactory.createWXAPI(this, "wxeed");//这里填入自己的微信APPID
    api.handleIntent(getIntent(), this);
  }

  @Override
  public void onReq(BaseReq baseReq) {

  }

  @Override
  public void onResp(BaseResp baseResp) {
    LogUtils.d("onPayFinish, errCode = " + baseResp.errCode);
    if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
      int errCord = baseResp.errCode;
      if (errCord == 0) {
        MyApplication.showToast("支付成功!");
        RxBus.get().post(RxBusKey.PAY_SUCCESS,true);
      } else {
        MyApplication.showToast("支付失败");
      }
      //这里接收到了返回的状态码可以进行相应的操作,如果不想在这个页面操作可以把状态码存在本地然后finish掉这个页面,这样就回到了你调起支付的那个页面
      //获取到你刚刚存到本地的状态码进行相应的操作就可以了
      finish();
    }
  }

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

这样基本就完成接入相关的功能


0评论