微信支付 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() {
}
});
我这里用的是两层请求数据,外层是请求订单的数据,里层是用来调用微信支付的。
好了,到此结束。