第三方支付(微信支付)




微信支付 Java SDK

微信支付开发者文档中给出的API进行了封装。

支付注意页面逻辑

这里面一定要分析公司给的接口文档 跟后台协商好

1:首先要去下订单去获取订单账号

2:通过订单去支付

3:在支付成功的接口里面去回调微信

示例

1.第一步,先导入依赖

implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

2.第二步,在清单文件里面加入权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

3.写一个button按钮,用来进行支付的操作.

4.使用微信的通用包,先创建一个包:wxapi,一个字母也不能错。创建一个微信的entryActivity

public class WXPayEntryActivityextends AppCompatActivityimplements IWXAPIEventHandler {

private IWXAPIiwxapi;

    private static StringAPP_ID ="wxb3852e6a6b7d9516";

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//        // 隐藏状态栏

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //接收到分享以及登录的intent传递handleIntent方法,处理结果

        iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);

        iwxapi.handleIntent(getIntent(), this);

    }

@Override

    public void onReq(BaseReq baseReq) {

}

@Override

    public void onResp(BaseResp baseResp) {

if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

switch (baseResp.errCode) {

case BaseResp.ErrCode.ERR_OK:

runOnUiThread(new Runnable() {

@Override

                        public void run() {

Toast.makeText(WXPayEntryActivity.this, "成功", Toast.LENGTH_SHORT).show();

                            Log.e("dj", "支付成功");

                            WXPayEntryActivity.this.finish();

                        }

});

break;

                case BaseResp.ErrCode.ERR_USER_CANCEL:

Toast.makeText(WXPayEntryActivity.this, "取消支付", Toast.LENGTH_SHORT).show();

                    Log.e("dj", "用户取消支付");

                    WXPayEntryActivity.this.finish();

break;

                default:

break;

            }

}

}

}

5.在实行支付的activity里面封装一个MD5方法,用来进行加密处理.

/**

*  MD5加密

* @param sourceStr

* @return

*/

public static StringMD5(String sourceStr) {

String result ="";

    try {

MessageDigest md = MessageDigest.getInstance("MD5");

        md.update(sourceStr.getBytes());

        byte b[] = md.digest();

        int i;

        StringBuffer buf =new StringBuffer("");

        for (int offset =0; offset < b.length; offset++) {

i = b[offset];

            if (i <0)

i +=256;

            if (i <16)

buf.append("0");

            buf.append(Integer.toHexString(i));

        }

result = buf.toString();

    }catch (NoSuchAlgorithmException e) {

System.out.println(e);

    }

return result;

}

6.接下来,就开始正式进行支付的逻辑请求了。当然了,在支付之前要先有一个订单,或者创建一个订单,能够用来支持进行支付的处理

StringBuilder sb =new StringBuilder();

String result ="";

HashMap map =new HashMap<>();

SharedPreferences user = MyApplication.context.getSharedPreferences("user", MODE_PRIVATE);

String userId = user.getString("userId", "");

map.put("commodityId",1001);

sb.append(userId);

sb.append(1001);

sb.append("tech");

result = sb.toString();

String s =MD5(result);

map.put("sign",s);

RetrofitManager.getInstance().createOrder(map, new Observer() {

@Override

    public void onSubscribe(Disposable d) {

}

@Override

    public void onNext(BuyVipBean buyVipBean) {

if (buyVipBean.getStatus().equals("0000")){

RetrofitManager.getInstance().weChatPay("20201201103009829", 1, new Observer() {

@Override

                public void onSubscribe(Disposable d) {

}

@Override

                public void onNext(PayBean payBean) {

if (payBean !=null && payBean.getStatus().equals("0000")) {

PayReq req =new PayReq();

                        req.appId = payBean.getAppId();

                        req.nonceStr = payBean.getNonceStr();

                        req.partnerId = payBean.getPartnerId();

                        req.prepayId = payBean.getPrepayId();

                        req.sign = payBean.getSign();

                        req.timeStamp = payBean.getTimeStamp();

                        req.packageValue = payBean.getPackageValue();

                        //去调微信

                        WXUtils.reg(MainActivity.this).sendReq(req);

                    }

}

@Override

                public void onError(Throwable e) {

}

@Override

                public void onComplete() {

}

});

        }

}

@Override

    public void onError(Throwable e) {

}

@Override

    public void onComplete() {

}

});

我这里用的是两层请求数据,外层是请求订单的数据,里层是用来调用微信支付的。

好了,到此结束。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容