这篇文章记录微信支付,因为很多地方用的到,今天特意写一下,加深印象,首先我们要到微信开发者平台去申请一些我们用到的数据
appid是必须的,申请好了之后,在开发文档里下载最新SDK放到 libs下面,
然后到Manifest里面填写
<!--微信支付 --> <activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> </activity>
别忘了这里需要填写appid
<activity android:name=".activity.YourActivity"//主activity入口 android:launchMode="standard" android:theme="@style/AppThemeTwo"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="appid"/>//填写你的appid </intent-filter> </activity>
接下来代码部分
注意 一定要新建一个wxapi这个包,把WxEntryActivity这个类放到这个包下才可能调起微信
直接把代码放上去
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler { private IWXAPI api; String appid = "填写你的appid", partnerid, prepayid, packagex, noncestr, timestamp, sign;//这几个字段是后台需要返回给我们的 private AlertDialog.Builder builder; private Dialog dialog; String sn = ""; String order_id;//下面这些把字段换成自己的基本可以copy,没什么
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); // appid = intent.getStringExtra("appid"); partnerid = intent.getStringExtra("partnerid"); prepayid = intent.getStringExtra("prepayid"); packagex = intent.getStringExtra("package"); noncestr = intent.getStringExtra("noncestr"); timestamp = intent.getStringExtra("timestamp"); sign = intent.getStringExtra("sign"); api = WXAPIFactory.createWXAPI(this, appid); api.registerApp(appid); api.handleIntent(getIntent(), this); if (!api.isWXAppInstalled()) { Toast.makeText(WXPayEntryActivity.this, "没有安装微信", Toast.LENGTH_SHORT).show(); finish(); return; } if (!api.isWXAppSupportAPI()) { Toast.makeText(WXPayEntryActivity.this, "当前微信版本不支持支付", Toast.LENGTH_SHORT).show(); finish(); return; } PayReq req = new PayReq(); req.appId = appid; req.partnerId = partnerid; req.prepayId = prepayid; req.packageValue = packagex; String nonceStr = noncestr;//获取随机生成字段 req.nonceStr = nonceStr; String time = timestamp; // if (time < 0) { // time = System.currentTimeMillis() / 1000; // } req.timeStamp = String.valueOf(time);// 时间戳单位秒 10位. req.sign = sign; api.sendReq(req); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { //支付结果回调 myHandler.sendEmptyMessage(0x001); if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { builder = new AlertDialog.Builder(this); builder.setTitle(R.string.app_tip); AlertDialog.Builder builder = new AlertDialog.Builder(this); dialog = builder.show(); builder.setMessage(getString(R.string.pay_result_callback_msg, baseResp.errStr + ";code=" + String.valueOf(baseResp.errCode))); dialog.show(); if (String.valueOf(baseResp.errCode).equals("0")) { ToastCommonUtils.showCommonToast(WXPayEntryActivity.this, "支付成功"); }else if (String.valueOf(baseResp.errCode).equals("2")) { { if (dialog.isShowing()) { dialog.dismiss(); ToastCommonUtils.showCommonToast(WXPayEntryActivity.this, "支付失败"); } } } } } @Override protected void onRestart() { super.onRestart(); } @Override protected void onStop() { if (dialog.isShowing()) { dialog.dismiss(); finish(); } super.onStop(); } Handler myHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0x001: // finish(); break; } super.handleMessage(msg); } }; }//到这里就可以调起微信支付了,别忘记打包的apk是release版的
![]()