1.首先注册微信开放平台,应用签名的获取前面博客有提到(测试时一定要注意你在开放平台上填的应用签名是测试的还是正式的)
2.在build.gradle添加依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
3.添加必要权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
4.在wxapi包下添加WXPayEntryActivity
在清单文件声明该实现类:
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI mApi;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mApi = WXAPIFactory.createWXAPI(this, "你的appid");
mApi.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mApi.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq pBaseReq) {}
//处理结果回调
@Override
public void onResp(BaseResp pBaseResp) {
PayResp resp = (PayResp) pBaseResp;
String payType = resp.extData;
if(pBaseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX){
if(pBaseResp.errCode == 0){
//支付成功的逻辑
if(payType.equals("ServiceType")){
Intent intent = new Intent(this, ResearchOrderActivity.class);
startActivity(intent);
}else if(payType.equals("OrderType")){
Intent intent = new Intent(this, OrderActivity.class);
startActivity(intent);
}
Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
}else if(pBaseResp.errCode==-1){
//支付失败的逻辑
Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
}else{
//取消支付的逻辑
Toast.makeText(this, "取消支付", Toast.LENGTH_SHORT).show();
}
finish();
}
}
}
5.调起微信支付代码:从后台获取参数后进行微信支付唤起操作。(微信开放平台:开放平台地址)
点击支付按钮时调支付接口,当接口成功时进行以下操作:
if (bean.getCode() == 200) {
String appId = bean.getData().getPayParameter().getAppId();
String partnerId = bean.getData().getPayParameter().getPartnerId();
String prepayId = bean.getData().getPayParameter().getPrepayId();
String nonceStr = bean.getData().getPayParameter().getNonceStr();
String timeStamp = bean.getData().getPayParameter().getTimeStamp();
String sign = bean.getData().getPayParameter().getSign();
PayReq req = new PayReq();//PayReq就是订单信息对象
IWXAPI wxapi = WXAPIFactory.createWXAPI(ContractContentActivity.this, null);
//给req对象赋值
req.appId = appId;//APPID
req.partnerId = partnerId;// 商户号
req.prepayId = prepayId;// 预付款ID
req.nonceStr = nonceStr;//随机数
req.timeStamp = timeStamp;//时间戳
req.packageValue = "Sign=WXPay";//固定值Sign=WXPay
req.sign = sign;//签名
req.extData = "app data"; //区分支付结果
wxapi.sendReq(req);//将订单信息对象发送给微信服务器,即发送支付请求
finish();
}