一般的企业软件开发都会涉及到微信以及支付宝支付,下面就来说一下我从零开始做微信支付的路
开放平台:https://open.weixin.qq.com
首先必不可少的你要有账号,注册,登录,添加一个app信息之后,就开始集成微信支付了
开发步骤文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
1.下载jar包,导入项目里面
地址:微信支付Jar下载
2.依据开发步骤文档里面,完善app信息,包括包名,签名,下载地址等信息
3.在项目目录下创建wxapi包并WXPayEntryActivity文件(建议从demo复制过来,然后修改),最后目录结构为:
视图为android视图,切换成package目录更容易观看(项目包太多不好截图)
4.Manifest.xml配置文件配置WXPayEntryActivity这个activity
/**
* 向微信注册
*/
private void initWxPay() {
final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
// 将该app注册到微信
boolean test = msgApi.registerApp(Constants.APP_ID);
Lg.e("app init", "微信注册结果:" + test);
}
6.请求自己的服务器进行签名操作(服务器拿到请求,会加签调用统一下单接口,拿到返回数据,然后加签返回给前端)
因为我们后台服务器接口也是自己写的,所以我只让前端 上传了body(商品详细) out_trade_no(订单号) total_fee(总金额 单位为分)这三个参数
7 .调起支付IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(req);
这些参数都可以用后台返回的,当然了.如果你比较苦逼.没有后台,那只有你来完成统一下单操作.然后得到预支付单号以及签名进行支付了8.支付结果回调
回调是写在WXPayEntryActivity里面的,不过要依据自身需求对逻辑进行分别处理了
我的该文件:(仅供参考)
package com.hd.ytb.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.hd.ytb.R;
import com.hd.ytb.activitys.activity_sms.SmsRechargeActivity;
import com.hd.ytb.app.Constants;
import com.hd.ytb.utils.Lg;
import com.hd.ytb.utils.Tst;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
public static final int PAY_STATUS_SUCCESS = 0;//支付成功
public static final int PAY_STATUS_FAIL = -1;//支付遇到问题
public static final int PAY_STATUS_CANCEL = -2;//支付取消
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
Lg.d(TAG, "onPayFinish, errCode = " + resp.errCode);
int errorCode = resp.errCode;
switch (errorCode) {
case PAY_STATUS_SUCCESS:
Tst.showShort(getApplicationContext(), "支付成功");
if (SmsRechargeActivity.isSmsWxPay) {
SmsRechargeActivity.sendResult2ThisContext(WXPayEntryActivity.this, errorCode);
}
break;
case PAY_STATUS_FAIL:
Tst.showShort(getApplicationContext(), "支付遇到问题");
break;
case PAY_STATUS_CANCEL:
Tst.showShort(getApplicationContext(), "支付取消");
break;
default:
break;
}
onBackPressed();
}
}