记录接Android微信支付(干货)

1、添加依赖包,在build.gardle的dependencies里面:

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

2、AndroidManifest.xml配置:

<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"/>
        <!-- 微信支付 -->
        <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="微信APPID" />
            </intent-filter>
        </activity> 

3、选择微信支付界面相关代码

 public void WxChatAPP() {
        /**
         *获取服务器传来微信信息
         **/
        HttpUtil.WxChatAPPPay(new HttpUtil.HttpCallbackListener() {
            @Override
            public void onFinish(String response) { 
                Gson gson = new Gson();
                wxxModel = gson.fromJson(response,wxModel.class);
                AllOrderListActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (wxxModel.getCode()==1){
                            appid=wxxModel.getResult().getAppid();
                            partnerId=wxxModel.getResult().getPartnerid();
                            prepayId=wxxModel.getResult().getPrepayid();
                            nonceStr=wxxModel.getResult().getNonceStr();
                            timeStamp=wxxModel.getResult().getTimeStamp();
                            sign=wxxModel.getResult().getSign();
                            wxPay(wxxModel.getResult().getPackageX());
                        }
                    }
                });

            }
            @Override
            public void onError(Exception e) {

            }
        });
    }
    private  void  wxPay(String pagePack){
        PayReq req = new PayReq();
        req.appId = appid;             //APPID
        req.partnerId = partnerId;     //商户号
        req.prepayId = prepayId;     //预付款ID
        req.nonceStr = nonceStr;    //随机数
        req.timeStamp = timeStamp;   //时间戳
        req.packageValue = pagePack;   //固定值Sign=WXPay
        req.sign = sign;         //签名
        HttpHeader.iwxapi.sendReq(req);
    }

 直接在选择微信支付的点击事件里调用 WxChatAPP();

4、WXPayEntryActivity的代码

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI iwxapi;
    private String appid,partnerId,prepayId,nonceStr,timeStamp,sign,pagePack;
    private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);
        iwxapi = WXAPIFactory.createWXAPI(this, HttpHeader.APP_ID); //初始化微信api
        iwxapi.handleIntent(getIntent(),this);

    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp resp) {
        String result = "";
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            switch (resp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    result = "微信支付成功";
                    break;
                case BaseResp.ErrCode.ERR_COMM:
                    result = "微信支付失败:" + resp.errCode + "," + resp.errStr;
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    result = "微信支付取消:" + resp.errCode + "," + resp.errStr;
                    break;
                default:
                    result = "微信支付未知异常:" + resp.errCode + "," + resp.errStr;
                    break;
            }
        }
        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
    }


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

其中HttpHeader.APP_ID和HttpHeader.iwxapi是我定义在HttpHeader里面变量

 微信支付亲测有效!!!!

注意点:

  • 在工程包名下根目录新建wxapi包,这个wxapi包的位置一定要是包名根目录,包名也不能错。在该包下新建回调类WXPayEntryActivity,该类的名字一定是在wxapi包下,名字也一定是WXPayEntryActivity。因为它是微信回调的接口,如果改变位置或名字,就会导致微信无法将支付结果反馈,从而导致支付失败。 

  • 支付成功后,回调的操作可写在onResp里面。
  • 补充点,小程序接微信支付方法类似,所需的信息都是服务器传给我们,最大的区别是小程序需要判断账户的登录授权操作,所以服务器通过我们传一个最新生成的code(通过wx.login获取的 )来生成openId......授权成功以后返回微信支付所需相关参数信息给我们。

作者:Aylson.Fu
出处:https://www.cnblogs.com/formybestlife/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。非常感谢~

posted @ 2018-11-16 15:22  Alyson.fu  阅读(1668)  评论(0编辑  收藏  举报