[微信支付] 简单封装

作者 : 开心源码 本文共5127个字,预计阅读时间需要13分钟 发布时间: 2022-05-12 共194人阅读

直奔主题
注意:需要理解集成的可以查看demo,demo不能唤起支付或者分享等功能,由于没有配置appKey,只能用作代码参考。

1、微信支付、登录、分享工具类:WXApiHelper.java

/** * 微信SDK帮助类 */public class WXApiHelper {    private static final String WX_APP_ID = "wx666666";//TODO 微信相关    private static final String WX_APP_SECRET = "66666666666666666";    private static final String WX_SCOPE = "snsapi_userinfo";    private static final String WX_STATE = "my_app_wx_login";    private static final String WX_GRANT_TYPE = "authorization_code";    private static final String WX_PACKAGE_VALUE = "Sign=WXPay";    private static WXApiHelper mHelper;    private final IWXAPI mWxApi;    /**     * APP.getInstance() 为Application的context     */    private WXApiHelper() {        mWxApi = WXAPIFactory.createWXAPI(APP.getInstance(), WX_APP_ID, false);        mWxApi.registerApp(WX_APP_ID);    }    public static WXApiHelper get() {        if (mHelper == null) {            mHelper = new WXApiHelper();        }        return mHelper;    }    /**     * 微信登录     */    public void doWxLogin() {        final SendAuth.Req req = new SendAuth.Req();        req.scope = WX_SCOPE;        req.state = WX_STATE;        mWxApi.sendReq(req);    }    /**     * 微信支付     *     * @param payInfo 支付相关信息,需要从自己的服务器获取     */    public void doWxPay(PayInfo payInfo) {        PayReq req = new PayReq();        req.appId = WX_APP_ID;        req.partnerId = payInfo.getPartnerid();        req.prepayId = payInfo.getPrepayid();        req.nonceStr = payInfo.getNoncestr();        req.timeStamp = payInfo.getTimestamp();        req.packageValue = WX_PACKAGE_VALUE;        req.sign = payInfo.getSign();        mWxApi.sendReq(req);    }    /**     * 微信分享url给朋友     *     * @param title 标题     * @param description 内容     * @param url 分享的url     */    public void doShareUrlToWeChat(String title, String description, String url) {        doShareUrl(title, description, url, SendMessageToWX.Req.WXSceneSession);    }    /**     * 微信分享url到朋友圈     * @param title 标题     * @param description 内容     * @param url 分享的url     */    public void doShareUrlToTimeline(String title, String description, String url) {        doShareUrl(title, description, url, SendMessageToWX.Req.WXSceneTimeline);    }    private void doShareUrl(String title, String description, String url, int scene) {        WXWebpageObject webpage = new WXWebpageObject();        webpage.webpageUrl = url;        WXMediaMessage msg = new WXMediaMessage(webpage);        msg.title = title;        msg.description = description;//        Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);//        msg.thumbData = Util.bmpToByteArray(thumbBmp, true);        SendMessageToWX.Req req = new SendMessageToWX.Req();        req.transaction = "webpage";        req.message = msg;        req.scene = scene;//        req.userOpenId = getOpenId();        mWxApi.sendReq(req);    }    //TODO 其余分享功能可以写到这里    public void handleIntent(Intent intent, IWXAPIEventHandler handler) {        mWxApi.handleIntent(intent, handler);    }}

2、实体类PayInfo.java

/** * 支付订单信息 (微信) */public class PayInfo {    //微信相关信息    private String return_code;//返回代号    private String return_msg;//    private String appid;//应用ID    private String mch_id;//    private String noncestr;//随机字符串    private String sign;//签名    private String result_code;//结果代号    private String prepayid;//预支付交易会话ID    private String trade_type;//交易类型    private String partnerid;//商户号    private String timestamp;//时间戳      //Getter 和 setter 方法这里就忽略不写}

3、调用

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    private void doWeChatPay() {        final PayInfo payInfo = new PayInfo();        //TODO 实际的PayInfo需要调自己的服务器获取相关信息        WXApiHelper.get().doWxPay(payInfo);    }    private void doWeChatShare() {        WXApiHelper.get().doShareUrlToWeChat("活动", "这是一个公益活动", "公益活动的网页链接");    }    private void doWeChatLogin() {        WXApiHelper.get().doWxLogin();    }}

4、支付回调WXPayEntryActivity.java

public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        WXApiHelper.get().handleIntent(getIntent(), this);    }    @Override    public void onReq(BaseReq baseReq) {    }    @Override    public void onResp(BaseResp baseResp) {        final int type = baseResp.getType();        if (ConstantsAPI.COMMAND_PAY_BY_WX == type) {            switch (baseResp.errCode) {                case BaseResp.ErrCode.ERR_OK:                    //TODO 支付成功                    break;                case BaseResp.ErrCode.ERR_COMM:                    Toast.makeText(this, "支付发生错误", Toast.LENGTH_LONG).show();                    finish();                    break;                case BaseResp.ErrCode.ERR_USER_CANCEL:                    Toast.makeText(this, "已取消", Toast.LENGTH_LONG).show();                    finish();                    break;                default:                    Toast.makeText(this, "错误码:" + baseResp.errCode, Toast.LENGTH_LONG).show();                    finish();                    break;            }        }    }}

5、分享和登录回调WXEntryActivity.java

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        WXApiHelper.get().handleIntent(getIntent(), this);    }    @Override    public void onReq(BaseReq baseReq) {    }    @Override    public void onResp(BaseResp baseResp) {        final int type = baseResp.getType();        if (ConstantsAPI.COMMAND_SENDAUTH == type) {//登录            switch (baseResp.errCode) {                case BaseResp.ErrCode.ERR_OK:                    final String code = ((SendAuth.Resp) baseResp).code;                    getWxLoginInfo(code);                    break;                case BaseResp.ErrCode.ERR_AUTH_DENIED:                    Toast.makeText(this, "拒绝受权微信登录", Toast.LENGTH_LONG).show();                    finish();                    break;                case BaseResp.ErrCode.ERR_USER_CANCEL:                    Toast.makeText(this, "已取消", Toast.LENGTH_LONG).show();                    finish();                    break;                default:                    Toast.makeText(this, "错误码:" + baseResp.errCode, Toast.LENGTH_LONG).show();                    finish();                    break;            }        } else if (ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX == type) {//分享            finish();        }    }    private void getWxLoginInfo(String code) {        //TODO 通过微信SDK返回的code,请求自己的服务器获取客户信息。    }}

总结:经过上面的简单封装,微信支付、登录和分享功能都使用起来都变得非常简单。同时添加了复用性,在不同项目里只需拷贝文件小改一下即可以。最后就是这个demo只是简单封装,假如有哪里做的不正确或者者哪里还可以优化的话,可以在评论区告诉下我,大家互相学习学习。

Demo:(喜欢的记得给个Star)

  • WeChatSdkDemo – 码云
  • WeChatSdkDemo – GitHub

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » [微信支付] 简单封装

发表回复