创建应用 什么什么的不说了
第一步导入伊兰
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
第二步 权限
<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" />
第三步 添加辅助类
package com.example.ypc.wzxtext4;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
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.tencent.mm.opensdk.openapi.WXAPIFactory;
/**
* 4.处理支付结果
*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this,"");
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 errCode = resp.errCode;
if (errCode == 0){
TODO: 2017/11/10
//成功
}else if (errCode == -1){
//ToastUtils.showLong("支付失败");
}else if (errCode == -2){
//ToastUtils.showLong("支付已被取消");
}
}
}
}
第四步 清单文件声明
<activity
android:name=".WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
第五步
private String mUrl = "网络请求地址";
private String mToken = "服务器给的token";
private RequestQueue mQueue;//Volley
第六部 请求 需要重新二个方法
//1.提交参数到服务
mQueue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.POST, mUrl, this, this) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> map = new HashMap<>();
/*@Path("payType") String payType, @Field("amount") String amount, @Field("token") String token,
@Field("version") String version, @Field("os") String os*/
map.put("amount", "1.0");
map.put("token", mToken);
map.put("version", "3.1.3");
map.put("os", "android");
return map;
}
};
mQueue.add(request);
break;
第七步 在成功方法里面 解析
@Override
public void onResponse(String s) {
//2.解析数据
Gson gson = new Gson();
WXBean bean = gson.fromJson(s, WXBean.class);
//3.调用微信的sdk
callSDK(bean);
}
第八步
private void callSDK(WXBean data) {
//先注册
String appid = data.getResult().getWx().getAppid();
IWXAPI api = WXAPIFactory.createWXAPI(this, null);
api.registerApp(appid);
//调sdk
PayReq req = new PayReq();
req.appId = appid;
req.partnerId = data.getResult().getWx().getPartnerid();
req.prepayId = data.getResult().getWx().getPrepayid();//预支付订单号:核心参数,该参数是微信服务器生成,相当于订单号
req.nonceStr = data.getResult().getWx().getNoncestr();
req.timeStamp = data.getResult().getWx().getTimestamp();
req.packageValue = data.getResult().getWx().getPackageX();
req.sign = data.getResult().getWx().getSign();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
//3.调用微信支付sdk支付方法
api.sendReq(req);
//4.处理支付结果
}