package io.github.mayubao.pay_library; import android.app.Activity; import android.util.Log; import android.widget.Toast; import com.tencent.mm.sdk.constants.ConstantsAPI; import com.tencent.mm.sdk.modelbase.BaseReq; import com.tencent.mm.sdk.modelbase.BaseResp; import com.tencent.mm.sdk.modelpay.PayReq; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; import com.tencent.mm.sdk.openapi.WXAPIFactory; /** * 微信支付请求 * * @author Administrator * */ public class WechatPayReq implements IWXAPIEventHandler { private static final String TAG = WechatPayReq.class.getSimpleName(); private Activity mActivity; //微信支付AppID private String appId; //微信支付商户号 private String partnerId; //预支付码(重要) private String prepayId; //"Sign=WXPay" private String packageValue; private String nonceStr; //时间戳 private String timeStamp; //签名 private String sign; //微信支付核心api IWXAPI mWXApi; public WechatPayReq() { super(); } /** * 发送微信支付请求 */ public void send() { mWXApi = WXAPIFactory.createWXAPI(mActivity, null); mWXApi.handleIntent(mActivity.getIntent(), this); mWXApi.registerApp(this.appId); PayReq request = new PayReq(); request.appId = this.appId; request.partnerId = this.partnerId; request.prepayId= this.prepayId; request.packageValue = this.packageValue != null ? this.packageValue : "Sign=WXPay"; request.nonceStr= this.nonceStr; request.timeStamp= this.timeStamp; request.sign = this.sign; mWXApi.sendReq(request); } public static class Builder{ //上下文 private Activity activity; //微信支付AppID private String appId; //微信支付商户号 private String partnerId; //预支付码(重要) private String prepayId; //"Sign=WXPay" private String packageValue="Sign=WXPay"; private String nonceStr; //时间戳 private String timeStamp; //签名 private String sign; public Builder() { super(); } public Builder with(Activity activity){ this.activity = activity; return this; } /** * 设置微信支付AppID * @param appId * @return */ public Builder setAppId(String appId){ this.appId = appId; return this; } /** * 微信支付商户号 * @param partnerId * @return */ public Builder setPartnerId(String partnerId){ this.partnerId = partnerId; return this; } /** * 设置预支付码(重要) * @param prepayId * @return */ public Builder setPrepayId(String prepayId){ this.prepayId = prepayId; return this; } /** * 设置 * @param packageValue * @return */ public Builder setPackageValue(String packageValue){ this.packageValue = packageValue; return this; } /** * 设置 * @param nonceStr * @return */ public Builder setNonceStr(String nonceStr){ this.nonceStr = nonceStr; return this; } /** * 设置时间戳 * @param timeStamp * @return */ public Builder setTimeStamp(String timeStamp){ this.timeStamp = timeStamp; return this; } /** * 设置签名 * @param sign * @return */ public Builder setSign(String sign){ this.sign = sign; return this; } public WechatPayReq create(){ WechatPayReq wechatPayReq = new WechatPayReq(); wechatPayReq.mActivity = this.activity; //微信支付AppID wechatPayReq.appId = this.appId; //微信支付商户号 wechatPayReq.partnerId = this.partnerId; //预支付码(重要) wechatPayReq.prepayId = this.prepayId; //"Sign=WXPay" wechatPayReq.packageValue = this.packageValue; wechatPayReq.nonceStr = this.nonceStr; //时间戳 wechatPayReq.timeStamp = this.timeStamp; //签名 wechatPayReq.sign = this.sign; return wechatPayReq; } } //微信支付监听 private OnWechatPayListener mOnWechatPayListener; public WechatPayReq setOnWechatPayListener(OnWechatPayListener onWechatPayListener) { this.mOnWechatPayListener = onWechatPayListener; return this; } /** * 微信支付监听 * @author Administrator * */ public interface OnWechatPayListener{ public void onPaySuccess(int errorCode); public void onPayFailure(int errorCode); } @Override public void onReq(BaseReq baseReq) { Toast.makeText(this.mActivity, "onReq===>>>get baseReq.getType : "+baseReq.getType(), Toast.LENGTH_LONG).show(); Log.d(TAG,"onReq===>>>get baseReq.getType : "+baseReq.getType()); } @Override public void onResp(BaseResp resp) { Toast.makeText(this.mActivity, "onResp===>>>get resp.getType : "+ resp.getType(), Toast.LENGTH_LONG).show(); // 0 成功 展示成功页面 // -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 // -2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。 if(resp.getType()== ConstantsAPI.COMMAND_PAY_BY_WX){ Log.d(TAG,"onPayFinish,errCode="+resp.errCode); if(this.mOnWechatPayListener != null){ if(resp.errCode == BaseResp.ErrCode.ERR_OK){ // 0 成功 展示成功页面 this.mOnWechatPayListener.onPaySuccess(resp.errCode); }else{// -1 错误 -2 用户取消 this.mOnWechatPayListener.onPayFailure(resp.errCode); } } } } }