记一次集成微信支付的故事

拿到APPID后,现在Application里去注册:

	private static IWXAPI api_;
	public static final String WX_APP_ID = "拿到的APPID";
	
	@Override
    public void onCreate() {
        super.onCreate();
        ...
        api_ = WXAPIFactory.createWXAPI(this, WX_APP_ID);
        api_.registerApp(WX_APP_ID);
    }

	public static IWXAPI getIWXAPI() {
        return api_;
    }

接下来是创建WXPayEntryActivity:

这部分基本和文档差不多。

import android.annotation.SuppressLint;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.zlxn.dl.yunvjia.R;
import com.zlxn.dl.yunvjia.activity.HomeActivity;
import com.zlxn.dl.yunvjia.app.BaseApplication;
import com.zlxn.dl.yunvjia.base.BaseActivity;

public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {

    private static final String TAG = "WXPayEntryActivity:";
    private IWXAPI api_ = BaseApplication.getIWXAPI();

    @Override
    protected void initView() {
        setContentView(R.layout.activity_w_x_pay_entry);
    }

    @Override
    protected void initData() {
        super.initData();

        api_.handleIntent(getIntent(), WXPayEntryActivity.this);

    }

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

    @Override
    public void onReq(BaseReq baseReq) {
    }

    @SuppressLint("LongLogTag")
    @Override
    public void onResp(BaseResp resp) {

        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if (resp.errCode == 0) {
                Toast.makeText(WXPayEntryActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(WXPayEntryActivity.this, HomeActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("flag", 3);
                startActivity(intent);
                finish();
            } else if (resp.errCode == -1) {
                Toast.makeText(WXPayEntryActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                finish();
            } else if (resp.errCode == -2) {
                Toast.makeText(WXPayEntryActivity.this, "您已取消支付", Toast.LENGTH_SHORT).show();
                finish();
            }
        }

    }
}

拿到后台返回数据后:

	PayReq req = new PayReq();
	Log.d("返回数据:", "onSuccess: " + wxBean.appid);
	req.appId = wxBean.appid;
	 req.partnerId = wxBean.partnerid;
	req.prepayId = wxBean.prepayid;
	req.packageValue = wxBean.packageX;
	req.nonceStr = wxBean.noncestr;
	req.timeStamp = wxBean.timestamp + "";
	req.sign = wxBean.sign;
	//req.extData = "app data";
	api_.sendReq(req);

此时已基本完事

遇 到 的 一 些 问 题 \color{red}{遇到的一些问题}

  • 如果后台返回的是对象的话,可能会有关键词,可以这样:
	@SerializedName("package")
	public String packageX;
  • 如果有Android 11 无反应,可参考文档:
	这边AndroidStudio 是4.0.1;
	
	classpath 'com.android.tools.build:gradle:3.6.4'
	
	清单文件放这个
	<manifest>
	...
	<queries>
	        <!-- com.blankj.utilcode SDK检测虚拟机-->
	        <intent>
	            <action android:name="android.intent.action.DIAL" />
	        </intent>
	        <!-- 微信支付SDK-->
	        <package android:name="com.tencent.mm" />
	        <!-- 支付宝支付SDK-->
	        <package android:name="com.eg.android.AlipayGphone" />
	</queries>
	<application>
	...
	</application>
	</manifest>
  • 签名需得和所打的正式包一致

    签名校验工具就是官方文档的那个:签名工具下载地址

  • 一个坑就来了(像极了电脑有问题?重启看看):

    这些做完还是无法调起,起先怀疑是测试机是Android 10的问题:
    先找同事用Android 6 的测试,第一次通了,但是未付款,在之后就不知道为啥不行了;
    再用一个Android 8的测试,没有问题。
    然后,继续勾搭Android 10的手机,微信开放社区的回答让人很啼笑皆非。

    直到在一个博客那里看到个清除微信缓存,说是有订单缓存。

    清了后没第一时间去测,是做了下别的功能,回头再测发现通了!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值