Android 集成微信支付

作者: MiHomes | 来源:发表于2018-03-30 11:02 被阅读332次

    一.长话短说,微信支付和支付宝支付一样,分为三部曲。

      a.向服务器发送请求,服务器返回订单信息
    
      b.调用微信请求发起支付
    
      c.处理回调结果 (在WXPayEntryActivity的onResp方法中,详见如下步骤3)
    

    二.直接上步骤:

    1.依赖:

    //微信支付
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
    

    2.权限:

    普通权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    
    高危权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    3.包名目录下创建wxapi文件夹,新建WXPayEntryActivity(WXEntryActivity可不创建)。如图:


    image.png

    WXPayEntryActivity代码如下(有个痛点,此activity一定要实现IWXAPIEventHandler接口):

    public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    
    private static final String TAG = "WXPayEntryActivity";
    
    private IWXAPI api;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        api = WXAPIFactory.createWXAPI(this, MyApplication.WXAPPID);
        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) {
        LogUtils.d(TAG, "WXPayEntryActivity = " + req.openId);
    }
    
    @Override
    public void onResp(BaseResp resp) {
        LogUtils.d(TAG, "WXPayEntryActivity = " + resp.errCode);
    
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX){
            if (resp.errCode == 0){ //支付成功
                
            }else {
                Toast.makeText(this,"支付失败,请重试",Toast.LENGTH_SHORT).show();
            }
            finish();
        }
      }
    }
    

    4.清单文件 即AndroidManifest.xml文件中声明支付所需的activity:

      <!-- 微信支付 -->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>
    

    5.向服务器发送请求,服务器返回订单信息,发起支付。发起支付代码如下,以下字段除应用ID外都为服务器返回:

     IWXAPI wxapi = WXAPIFactory.createWXAPI(this, MyApplication.WXAPPID);  //应用ID 即微信开放平台审核通过的应用APPID
        wxapi.registerApp(MyApplication.WXAPPID);    //应用ID
        PayReq payReq = new PayReq();
        payReq.appId = MyApplication.WXAPPID;        //应用ID
        payReq.partnerId = bean.getPartnerId();      //商户号 即微信支付分配的商户号
        payReq.prepayId = bean.getPrepayId();        //预支付交易会话ID
        payReq.packageValue = bean.getPackageX();    //扩展字段
        payReq.nonceStr = bean.getNonceStr();        //随机字符串不长于32位。
        payReq.timeStamp = "" + bean.getTimeStamp(); //时间戳
        payReq.sign = bean.getPaySign();             //签名
        wxapi.sendReq(payReq);
    

    6.处理回调,回调结果在WXPayEntryActivity的onResp方法中,可见步骤3

    三.随手分享,喜欢的朋友可以关注本微信公众号MiHomes,后续会有更多更好的博客推送给您。

    另:欢迎指出不足,会进行更正

    末尾:移动互联&人力资源交流群,可加微信zy666128入群交流。

    image.png

    相关文章

      网友评论

      本文标题:Android 集成微信支付

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