-
申请APP_ID,添加依赖库
-
在app包下新建wxapi包,在包下新建WXPayEntryActivity,继承自任意Activity实现微信支付回调接口。该Activity用以接收支付结果回调
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{ private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity"; private IWXAPI api; private static final String APP_ID = "your app id"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pay_result); 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);// 支付结果码 } }
清单声明此Activity的格式为
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
注:统一下单接口由自己服务器的去请求下单,我们只需要请求自己服务器端定义的下单的接口,从而达到去微信服务器进行下单的操作,并拿到返回的数据
-
根据自己服务器定义的下单接口拿到调起微信支付的参数数据,从而调起第三方微信支付,示例代码如下:
//实例化IWXAPI IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true); mWxApi.registerApp(WX_APPID);
拿到下单返回数据调用支付接口
/**
* 请求自己的App服务器自定义的下单接口,
* 让自己App服务器那边去WeiXin服务器进行下单
* 并得到的返回的回调数据
*/
@Override
public void onGet(JSONObject jsonObject) {
if (mWxApi != null) {
PayReq req = new PayReq();
req.appId = WX_APPID;// 微信开放平台审核通过的应用APPID
try {
req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号
req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取
req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成
req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出
req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay
req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个
} catch (JSONException e) {
e.printStackTrace();
}
mWxApi.sendReq(req);
Log.d("发起微信支付申请");
}
}
调用:
WXPayUtils.getInstance().doPay(req, new WXPayResultCallBack() {
@Override
public void onSuccess() {
view.paySuccess(orderResponse.getPayFlowNo());
}
@Override
public void onError(int error_code,String erroStr) {
view.payFail(erroStr);
if(error_code == WXPayUtils.ERROR_NOT_SUPPORT){
ToastUtils.showToast(erroStr);
return;
}
ToastUtils.showToast(" errorCode:"+error_code+" erroStr:"+erroStr);
}
@Override
public void onCancel() {
ToastUtils.showToast("支付取消");
}
});