1:导入jar包wechat-sdk-android-with-mta-5.1.0
2:创建wxapi包下创建WXPayEntryActivity类 代码如下:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity"; private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.pay_result); api = WXAPIFactory.createWXAPI(this, GlobalVariable.WXAPP_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) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { switch (resp.errCode) { case 0: setPayResult(WxPayResult.success); break; default: setPayResult(WxPayResult.fail); break; } } finish(); } private void setPayResult(WxPayResult payResultResult) { EventBus.getDefault().post(payResultResult); //结束掉自己 finish(); } }
3:后台调用微信的统一下单接口 ,再给前端一个接口前端只需要传金额
注意:这里要看后台怎么处理,两种方式
(1)上传金额后,后台返回各种数据然后前端再调用后台生成MD5签名接口后台返回
PaySign,最后启用微信客户端
(2)上传金额后,后台返回各种数据并包含已经计算好的MD5值,然后前端直接启用微信
这里就是第一种方式
private void Wxpay() { WXbean wXbean = new WXbean(); wXbean.setTotalAmount(money); HttpUtils.baseHttpPushJson(baseContext, "/thirdPartyPay/wxOrder", new Gson().toJson(wXbean), new HttpUtils.HttpUtilCallBck() { @Override public void onSucceed(String jsonBody) { Log.e("zgnWX",":"+jsonBody); wxConfig = CommonUtils.changeGsonToBean(jsonBody, WxConfig.class); if (wxConfig != null){
gotoPay();
} } @Override public void onFaild(int code, String message) { } @Override public void onFaildByOther(String other) { } }); }
public void gotoPay(){
WxConfigSub wxConfigSub = new WxConfigSub(); wxConfigSub.setPackageX("Sign=WXPay"); wxConfigSub.setPartnerid(GlobalVariable.WXAPP_partnerid); wxConfigSub.setAppid(GlobalVariable.WXAPP_ID); wxConfigSub.setNoncestr(wxConfig.getNoncestr()); wxConfigSub.setPrepayid(wxConfig.getPrepayid()); wxConfigSub.setTimestamp(wxConfig.getTimestamp()); HttpUtils.baseHttpPushJson(baseContext, "/thirdPartyPay/getSign", new Gson().toJson(wxConfigSub), new HttpUtils.HttpUtilCallBck() { @Override public void onSucceed(String jsonBody) { Log.e("PaySign",":"+jsonBody); PaySign =jsonBody; SDKPay(); } @Override public void onFaild(int code, String message) { } @Override public void onFaildByOther(String other) { } }); } }
}
其中
WxConfigSub为:
public class WxConfigSub { private String appid; private String partnerid; private String prepayid; private String noncestr; @SerializedName("package") private String packageX; private String timestamp; }
WxConfig为:
public class WxConfig{
private String prepay_id;
private String nonce_str;
private String timeStamp;
}
4:启用微信客户端:
private void SDKPay() { api = WXAPIFactory.createWXAPI(baseContext, GlobalVariable.WXAPP_ID); api.registerApp(GlobalVariable.WXAPP_ID); if (!api.isWXAppInstalled()) { ToastUtils.showLong(baseContext, "没有安装微信"); } else if (!api.isWXAppSupportAPI()) { ToastUtils.showLong(baseContext, "当前版本不支持支付功能"); } else { PayReq req = new PayReq(); req.appId = GlobalVariable.WXAPP_ID; req.partnerId = GlobalVariable.WXAPP_partnerid; req.prepayId = wxConfig.getPrepayid(); req.nonceStr = wxConfig.getNoncestr(); req.timeStamp = wxConfig.getTimestamp(); req.packageValue = "Sign=WXPay"; req.sign =PaySign ; api.sendReq(req); } }