微信支付步骤及账号部分在微信相关功能中体现,此处不再赘述:微信相关功能
账号注册号之后创建APP基本信息,APP信息,注意包名与签名填写必须正确。
下面进入功能集成部分
写在之前:微信支付因为安全以及后期需求问题,需要与后台相协作来共同完成支付的过程,APP端负责业务流程,下单由后台向微信服务器发起,所以支付的流程如下(就开发而言简化):
拿到预付款订单信息之后调起微信支付就可以了。
1、资源集成,两种方式:
1)下载资源集成(已经不再推荐,最新的下载链接连接到的是Jcenter)。
地址:微信资源下载
下载之后解压得到 libammsdk.jar集成到项目中并进行依赖即可
2)gradle方式集成。
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或者
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
第一个包含统计功能,第二个不包含统计功能。
2、权限注册:
在Manifests进行相关的权限注册如下:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、将APP注册到微信(注意将appId替换成你自己注册的AppId):
IWXAPI weixinAPI=WXAPIFactory.createWXAPI(this, 'appiId', true);
weixinAPI.registerApp('appId');
4、微信支付的发起:
(具体参考微信支付开发文档)
1)调用后台接口拿到相关的信息(预付款id等)
2)发起支付:
PayReq request = new PayReq();
request.appId = ‘appId’;
request.partnerId = ‘商户id’;
request.prepayId = ‘预付款订单id’;
request.packageValue = "Sign=WXPay";
request.nonceStr = ‘随机字符串’;
request.timeStamp = ‘时间戳’;
request.sign = ‘签名’;
WeixinAPI.sendReq(request);
3)参数说明:
应用ID appid String(32) 是 wx8888888888888888 微信开放平台审核通过的应用APPID
商户号 partnerid String(32) 是 1900000109 微信支付分配的商户号
预支付交易会话ID prepayid String(32) 是 WX1217752501201407033233368018 微信返回的支付交易会话ID
扩展字段 package String(128) 是 Sign=WXPay 暂填写固定值Sign=WXPay
随机字符串 noncestr String(32) 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。推荐随机数生成算法
时间戳 timestamp String(10) 是 1412000000 时间戳,请见接口规则-参数规定
签名 sign String(32) 是 C380BEC2BFD727A4B6845133519F3AD6 签名,详见签名生成算法注意:签名方式一定要与统一下单接口使用的一致
5、微信支付结果的接收:
新建Activity如下(注意在Manifest注册):
import com.orhanobut.logger.Logger;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelpay.PayResp;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.weili.jinjin.pigeonracing.app.PigeonApp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WeixinAPI.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
WeixinAPI.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
// if (resp instanceof PayResp) {
// Logger.e(TAG, "1-支付回调");
// PayResp resp1 = (PayResp) resp;
// switch (resp.errCode) {
// case BaseResp.ErrCode.ERR_OK:
// Logger.e(TAG, "1-支付成功");
// break;
// case BaseResp.ErrCode.ERR_USER_CANCEL:
// Logger.e(TAG, "1-支付取消");
// break;
// case BaseResp.ErrCode.ERR_AUTH_DENIED:
// Logger.e(TAG, "1-支付拒绝");
// break;
// default:
// Logger.e(TAG, "1-支付返回");
// break;
// }
// }
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
Logger.e(TAG, "支付回调");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
Logger.e(TAG, "支付成功");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Logger.e(TAG, "支付取消");
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Logger.e(TAG, "支付拒绝");
break;
default:
Logger.e(TAG, "支付返回");
break;
}
}
finish();
}
}
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:label="@string/app_name"/>
6、根据收到的回调结果进行展示就可以了,但是此处的结果仅供参考,具体结果以后台的异步回调为准。