前段时间在一个App中接入了微信支付功能,想来也稳定运行快一个月了,回头想想自己接入微信支付时候踩过的坑,决定写一篇自己当初想要搜寻的文章,文章准备分3篇完成。
第一篇:微信支付前期准备
第二篇:微信支付接入客户端部分(以Android为例)
第三篇:微信支付接入服务端部分
客户端接入流程介绍
只要清楚了接入流程,微信支付客户端的接入是很简单的。
- 点击你APP的一个按钮,调用你向APP后台发起生成订单的请求接口函数。
- 后台接口生成自己平台的订单,然后调用腾讯后台生成微信预支付订单后将数据返回给前端。
- 前端拿到需要的数据后,调起微信支付
- 输入密码,确认支付
-
向后台确认支付状态后展示结果。(此步很重要,虽然微信支付前端也会产生回调,但是微信官方说那个不准确,需要主动向后端验证)
完成上面5步即可轻松完成支付,是不是巨简单。
具体接入步骤
先阅读开发文档,了解概况,并下载示例代码。
第一步: 在AndroidStudio 里面打开 app模块下的build.gradle
文件,在依赖里面配置
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
第二步: 在包名下面建立wxapi
文件夹,然后将WXPayEntryActivity
文件放入其中,注意路径一定要正确,java/你的包名/wxapi/WXPayEntryActivity.java
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler
{
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
private Activity mAct;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.pay_result);
mAct=this;
api = WXAPIFactory.createWXAPI(this, KeyStore.WE_CHAT_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) {
if (req instanceof PayReq)
{
Logger.t(TAG).d("是子类");
}
}
@Override
public void onResp(BaseResp resp) {
//Logger.t(TAG).d("onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
{
switch (resp.errCode) {
case 0:
mAct.sendBroadcast(new Intent(AppConstant.BROAD_ANCTION_PAY_SUCCESS));
break;
case -1:
ToastUtils.showShort("支付失败");
break;
case -2:
ToastUtils.showShort("支付取消");
break;
default:
ToastUtils.showShort("支付失败");
break;
}
finish();
}
}
}
支付完成后会回调onResp()
方法
第三步: 调用你自己的生成订单的后台接口,这个接口生成自己的订单,然后调用微信支付后台,获得需要的参数。 所需参数参考下面的javabean
public class WeChatBean
{
private String appId;
private String partnerId;
private String prepayId;
private String nonceStr;
private String timeStamp;
private String sign;
private String extData;
private String signType;
****
}
第四步: 使用后台返回来的数据调起微信支付
public void weChatPay(WeChatBean weChatBean)
{
IWXAPI payApi = WXAPIFactory.createWXAPI(mAct, weChatBean.getAppId());
if (payApi != null)
payApi.registerApp(weChatBean.getAppId());
PayReq payReq = new PayReq();
payReq.appId = weChatBean.getAppId();
payReq.partnerId = weChatBean.getPartnerId();
payReq.prepayId = weChatBean.getPrepayId();
payReq.packageValue = "Sign=WXPay";
payReq.nonceStr = weChatBean.getNonceStr();
payReq.timeStamp = weChatBean.getTimeStamp();
payReq.sign = weChatBean.getSign();
payReq.extData = weChatBean.getExtData();
myRechargeOrderId = weChatBean.getExtData();
payApi.sendReq(payReq);
}
第五步:输入密码支付后,会回调WXPayEntryActivity
里面的onResp()
方法。
public void onResp(BaseResp resp) {
//Logger.t(TAG).d("onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
{
switch (resp.errCode) {
case 0:
//mAct.sendBroadcast(new Intent(AppConstant.BROAD_ANCTION_PAY_SUCCESS));
break;
case -1:
ToastUtils.showShort("支付失败");
break;
case -2:
ToastUtils.showShort("支付取消");
break;
default:
ToastUtils.showShort("支付失败");
break;
}
finish();
}
}
第六步: 当支付成功时,调用自己的后台接口,查询支付结果。向后台查询支付结果需要等待一定时间,例如1秒,因为微信回调支付结果给我们后台是需要时间的,如果立刻查询有可能查询不到结果。我是发了个广播,然后在我发起支付的页面接收广播,处理了支付结果。
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
Logger.t(TAG).d("接收到了广播》action:" + action);
//支付成功状态确认
if (action.equals(AppConstant.BROAD_ANCTION_PAY_SUCCESS))
{
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
if (mPresenter != null)
mPresenter.queryOrderPayState(myRechargeOrderId);
}
}, 1000);
}
}
};
注意:一定要注意签名要和腾讯后台配置一致,不然会调起失败。
很简单,没有骗你吧,本文源码下载
预知服务器端如何,且看下篇博文。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14796.html