Android中调用微信支付接口

在我的项目中还没有接入这个功能的时候就听说微信支付的接口很坑爹,用完之后发现别人说的一点也没有错,蛋疼归蛋疼,该用还是要用。在这里把遇到的问题记录一下以免以后需要再次介入的话碰到问题浪费时间。

微信支付流程及注意事项
1.后台设置:在微信开放平台申请开发应用,获得APP-ID
2.引入微信支付SDK
3.在你需要支付的页面注册微信APP-ID,一般在oncreat里,代码如下
        wxApi = WXAPIFactory.createWXAPI(mContext, APP_ID, true);
        wxApi.registerApp(APP_ID);
4.调用支付接口:
    /**
     * 微信支付业务
     */
    private void wxPay(String result) {
        Toast.makeText(mContext, "获取订单中...", Toast.LENGTH_SHORT).show();
        try {
            org.json.JSONObject json = new org.json.JSONObject(result);
            if (null != json && !json.has("retcode")) {
                PayReq req = new PayReq();
                req.appId = json.getString("appid");
                req.partnerId = json.getString("partnerid");
                req.prepayId = json.getString("prepayid");
                req.nonceStr = json.getString("noncestr");
                req.timeStamp = json.getString("timestamp");
                req.packageValue = json.getString("package");
                req.sign = json.getString("sign");
                req.extData = "app data"; // optional
                Toast.makeText(mContext, "正常调起支付", Toast.LENGTH_SHORT).show();
                wxApi.sendReq(req);
            } else {
                Log.d("PAY_GET", "返回错误" + json.getString("retmsg"));
                Toast.makeText(mContext, "返回错误" + json.getString("retmsg"), Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            Log.e("PAY_GET", "异常:" + e.getMessage());
            Toast.makeText(mContext, "异常:" + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    (方法的构造函数result为支付订单所需要的json数据)
5.获取微信支付的返回结果(返回结果码0为成功,-1为失败,-2为取消支付)
  需要注意的是微信支付的返回结果只能用WXPayEntryActivity类来接受收,且该类的包名为:你的主包名.wxapi.WXPayEntryActivity
  例如你的主包名为com.wxpay则该类的路径为:com.wxpay.wxapi.WXPayEntryActivity(必须这样做,否则接收不到返回结果)
  注册到Manifest中
        <activity
            android:name="你的主包名.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>
该类的代码如下:            
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
    
    private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
    
    private IWXAPI api;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.empty);
        
        api = WXAPIFactory.createWXAPI(this, "你的APP-ID");
        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) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            int errCord = resp.errCode;
            //这里接收到了返回的状态码可以进行相应的操作,如果不想在这个页面操作可以把状态码存在本地然后finish掉这个页面,这样就回到了你调起支付的那个页面
            //获取到你刚刚存到本地的状态码进行相应的操作就可以了
        }
    }
}

PS:如果什么都对了返回的状态码还是-1也就是支付失败,可以清空你手机上的微信的缓存再试试

转载于:https://www.cnblogs.com/bereeze-cai/p/6008150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值