微信支付与支付宝的封装

来源:互联网 发布:对人工智能的看法 编辑:程序博客网 时间:2024/05/19 10:41
  • 0.先睹为快

这里写图片描述

在这里没有详细说明要怎么接入微信支付和支付宝,具体去看官方的文档,请见谅。

  • 1.Android Manifest配置
<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" />
  • 2.注册activity
<!-- 微信支付 --><activity     android:name=".wxapi.WXPayEntryActivity"     android:configChanges="keyboardHidden|orientation|screenSize"     android:exported="true"     android:launchMode="singleTop"     android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity     android:name="com.cooby.news.play.weixin.WXPayCallbackActivity"     android:configChanges="orientation|keyboardHidden|navigation|screenSize"     android:launchMode="singleTop"     android:theme="@android:style/Theme.Translucent.NoTitleBar" > </activity> <!-- 支付宝支付 --> <activity     android:name="com.alipay.sdk.app.H5PayActivity"     android:configChanges="orientation|keyboardHidden|navigation"     android:exported="false"     android:screenOrientation="behind"></activity> <activity     android:name="com.alipay.sdk.auth.AuthActivity"     android:configChanges="orientation|keyboardHidden|navigation"     android:exported="false"     android:screenOrientation="behind"></activity>
  • 3.支付宝支付的代码封装
public class Alipay {    private String mParams;    private PayTask mPayTask;    private AlipayResultCallBack mCallback;    public static final int ERROR_RESULT = 1;   //支付结果解析错误    public static final int ERROR_PAY = 2;  //支付失败    public static final int ERROR_NETWORK = 3;  //网络连接错误    public interface AlipayResultCallBack {        void onSuccess(); //支付成功        void onDealing();    //正在处理中 小概率事件 此时以验证服务端异步通知结果为准        void onError(int error_code);   //支付失败        void onCancel();    //支付取消    }    public Alipay(Context context, String params, AlipayResultCallBack callback) {        mParams = params;        mCallback = callback;        mPayTask = new PayTask((Activity) context);    }    //支付    public void doPay() {        final Handler handler = new Handler();        new Thread(new Runnable() {            @Override            public void run() {                String result = mPayTask.pay(mParams, true);                final AlipayResult pay_result = new AlipayResult(result);                handler.post(new Runnable() {                    @Override                    public void run() {                        if(mCallback == null) {                            return;                        }                        if(pay_result == null) {                            mCallback.onError(ERROR_RESULT);                            return;                        }                        String resultStatus = pay_result.getResultStatus();                        if(TextUtils.equals(resultStatus, "9000")) {    //支付成功                            mCallback.onSuccess();                        } else if(TextUtils.equals(resultStatus, "8000")) { //支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)                            mCallback.onDealing();                        } else if(TextUtils.equals(resultStatus, "6001")) {     //支付取消                            mCallback.onCancel();                        } else if(TextUtils.equals(resultStatus, "6002")) {     //网络连接出错                            mCallback.onError(ERROR_NETWORK);                        } else if(TextUtils.equals(resultStatus, "4000")) {        //支付错误                            mCallback.onError(ERROR_PAY);                        }                    }                });            }        }).start();    }}
public class AlipayResult {    private String resultStatus;    private String result;    private String memo;    public AlipayResult(String rawResult) {        if (TextUtils.isEmpty(rawResult))            return;        String[] resultParams = rawResult.split(";");        for (String resultParam : resultParams) {            if (resultParam.startsWith("resultStatus")) {                resultStatus = gatValue(resultParam, "resultStatus");            }            if (resultParam.startsWith("result")) {                result = gatValue(resultParam, "result");            }            if (resultParam.startsWith("memo")) {                memo = gatValue(resultParam, "memo");            }        }        if (TextUtils.isEmpty(resultStatus)) {            return;        }    }    @Override    public String toString() {        return "resultStatus={" + resultStatus + "};memo={" + memo                + "};result={" + result + "}";    }    private String gatValue(String content, String key) {        String prefix = key + "={";        return content.substring(content.indexOf(prefix) + prefix.length(),                content.lastIndexOf("}"));    }    /**     * @return the resultStatus     */    public String getResultStatus() {        return resultStatus;    }    /**     * @return the memo     */    public String getMemo() {        return memo;    }    /**     * @return the result     */    public String getResult() {        return result;    }}
  • 4.微信支付的代码封装
/** * 微信支付 */public class WXPay {    private static WXPay mWXPay;    private IWXAPI mWXApi;    private String mPayParam;    private WXPayResultCallBack mCallback;    public static final int NO_OR_LOW_WX = 1;   //未安装微信或微信版本过低    public static final int ERROR_PAY_PARAM = 2;  //支付参数错误    public static final int ERROR_PAY = 3;  //支付失败    public interface WXPayResultCallBack {        void onSuccess(); //支付成功        void onError(int error_code);   //支付失败        void onCancel();    //支付取消    }    public WXPay(Context context, String wx_appid) {        mWXApi = WXAPIFactory.createWXAPI(context, null);        mWXApi.registerApp(wx_appid);    }    public static void init(Context context, String wx_appid) {        if(mWXPay == null) {            mWXPay = new WXPay(context, wx_appid);        }    }    public static WXPay getInstance(){        return mWXPay;    }    public IWXAPI getWXApi() {        return mWXApi;    }    /**     * 发起微信支付     */    public void doPay(String pay_param, WXPayResultCallBack callback) {        mPayParam = pay_param;        mCallback = callback;        if(!check()) {            if(mCallback != null) {                mCallback.onError(NO_OR_LOW_WX);            }            return;        }        JSONObject param = null;        try {            param = new JSONObject(mPayParam);        } catch (JSONException e) {            e.printStackTrace();            if(mCallback != null) {                mCallback.onError(ERROR_PAY_PARAM);            }            return;        }        if(param == null || TextUtils.isEmpty(param.optString("appid")) || TextUtils.isEmpty(param.optString("partnerid"))                || TextUtils.isEmpty(param.optString("prepayid")) || TextUtils.isEmpty(param.optString("package")) ||                TextUtils.isEmpty(param.optString("noncestr")) || TextUtils.isEmpty(param.optString("timestamp")) ||                TextUtils.isEmpty(param.optString("sign"))) {            if(mCallback != null) {                mCallback.onError(ERROR_PAY_PARAM);            }            return;        }        PayReq req = new PayReq();        req.appId = param.optString("appid");        req.partnerId = param.optString("partnerid");        req.prepayId = param.optString("prepayid");        req.packageValue = param.optString("package");        req.nonceStr = param.optString("noncestr");        req.timeStamp = param.optString("timestamp");        req.sign = param.optString("sign");        mWXApi.sendReq(req);    }    //支付回调响应    public void onResp(int error_code) {        if(mCallback == null) {            return;        }        if(error_code == 0) {   //成功            mCallback.onSuccess();        } else if(error_code == -1) {   //错误            mCallback.onError(ERROR_PAY);        } else if(error_code == -2) {   //取消            mCallback.onCancel();        }        mCallback = null;    }    //检测是否支持微信支付    private boolean check() {        return mWXApi.isWXAppInstalled() && mWXApi.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;    }}
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.pay_results);        if(WXPay.getInstance() != null) {            WXPay.getInstance().getWXApi().handleIntent(getIntent(), this);        } else {            finish();        }    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);          if(WXPay.getInstance() != null) {                WXPay.getInstance().getWXApi().handleIntent(intent, this);            }    }    @Override    public void onReq(BaseReq req) {    }    @Override    public void onResp(BaseResp resp) {         if(resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {                if(WXPay.getInstance() != null) {                    if(resp.errStr != null) {                        Log.e("wxpay", "errstr=" + resp.errStr);                    }                    WXPay.getInstance().onResp(resp.errCode);                    finish();                }            }    }}
public class WXPayCallbackActivity extends Activity implements IWXAPIEventHandler {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_wxpay_call_back);        if(WXPay.getInstance() != null) {            WXPay.getInstance().getWXApi().handleIntent(getIntent(), this);        } else {            finish();        }    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        if(WXPay.getInstance() != null) {            WXPay.getInstance().getWXApi().handleIntent(intent, this);        }    }    @Override    public void onReq(BaseReq baseReq) {    }    @Override    public void onResp(BaseResp baseResp) {        if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {            if(WXPay.getInstance() != null) {                if(baseResp.errStr != null) {                    Log.e("wxpay", "errstr=" + baseResp.errStr);                }                WXPay.getInstance().onResp(baseResp.errCode);                finish();            }        }    }}
  • 5.发起支付

在业务代码中调用封装好的微信支付或支付宝支付

  • 5.1 微信支付
/**     * 微信支付     * @param pay_param 支付服务生成的支付参数     */    private void doWXPay(String pay_param) {        String wx_appid = "wx6b69bdbf2adca4f8";     //替换为自己的appid        WXPay.init(getApplicationContext(), wx_appid);      //要在支付前调用        WXPay.getInstance().doPay(pay_param, new WXPay.WXPayResultCallBack() {            @Override            public void onSuccess() {                Toast.makeText(getApplication(), "支付成功", Toast.LENGTH_SHORT).show();            }            @Override            public void onError(int error_code) {                switch (error_code) {                    case WXPay.NO_OR_LOW_WX:                        Toast.makeText(getApplication(), "未安装微信或微信版本过低", Toast.LENGTH_SHORT).show();                        break;                    case WXPay.ERROR_PAY_PARAM:                        Toast.makeText(getApplication(), "参数错误", Toast.LENGTH_SHORT).show();                        break;                    case WXPay.ERROR_PAY:                        Toast.makeText(getApplication(), "支付失败", Toast.LENGTH_SHORT).show();                        break;                }            }            @Override            public void onCancel() {                Toast.makeText(getApplication(), "支付取消", Toast.LENGTH_SHORT).show();            }        });    }
  • 5.2 支付宝支付
/**     * 支付宝支付     * @param pay_param 支付服务生成的支付参数     */    private void doAlipay(String pay_param) {        new Alipay(this, pay_param, new Alipay.AlipayResultCallBack() {            @Override            public void onSuccess() {                Toast.makeText(getApplication(), "支付成功", Toast.LENGTH_SHORT).show();            }            @Override            public void onDealing() {                Toast.makeText(getApplication(), "支付处理中...", Toast.LENGTH_SHORT).show();            }            @Override            public void onError(int error_code) {                switch (error_code) {                    case Alipay.ERROR_RESULT:                        Toast.makeText(getApplication(), "支付失败:支付结果解析错误", Toast.LENGTH_SHORT).show();                        break;                    case Alipay.ERROR_NETWORK:                        Toast.makeText(getApplication(), "支付失败:网络连接错误", Toast.LENGTH_SHORT).show();                        break;                    case Alipay.ERROR_PAY:                        Toast.makeText(getApplication(), "支付错误:支付码支付失败", Toast.LENGTH_SHORT).show();                        break;                    default:                        Toast.makeText(getApplication(), "支付错误", Toast.LENGTH_SHORT).show();                        break;                }            }            @Override            public void onCancel() {                Toast.makeText(getApplication(), "支付取消", Toast.LENGTH_SHORT).show();            }        }).doPay();    }
0 0
原创粉丝点击