下面我们先来看下微信支付的效果图:
1.首先我们来看下APP支付的业务流程:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3,如下:
2.移动端微信支付开发步骤请参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
3.Android微信SDK的接入请参考:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
4.下面我以AndroidStudio作为开发工具进行微信支付的集成:
(1)添加gradle依赖:
dependencies {
//微信SDK接入
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
gralde构建完成之后,再做下一步的操作。
(2)在AndroidManifest.xml中添加相关权限:
<!--微信支付权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(3)创建wxapi目录,并创建WXPayEntryActivity,在工程包名下根目录新建wxapi包,这个wxapi包的位置一定要是包名根目录,包名也不能错。
WXPayEntryActivity实现IWXAPIEventHandler接口,这个Activity页面就是支付结果的回调页面,下面是它最简单地实现:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
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, "你的appid");
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) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("支付结果");
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}
}
}
同时,别忘了在AndroidManifest.xml中声名WXPayEntryActivity
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="你的appid"/>
</intent-filter>
</activity>
(4)调起支付接口:
IWXAPI api= WXAPIFactory.createWXAPI(context, "wxAPPID",false);//填写自己的APPIDapi.registerApp("wxAPPID");//填写自己的APPID,注册本身
APPPayReq req = new PayReq();//PayReq就是订单信息对象
req.appId= "wx8888888888888888";//你的微信appid
req.partnerId = "1900000109";//商户号
req.prepayId = "WX1217752501201407033233368018";//预支付交易会话ID
req.nonceStr = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS";//随机字符串
req.timeStamp = "1412000000";//时间戳
req.packageValue = "Sign=WXPay";扩展字段,这里固定填写Sign=WXPay
req.sign = "C380BEC2BFD727A4B6845133519F3AD6";//签名
api.sendReq(req);//将订单信息对象发送给微信服务器,即发送支付请求
这里需要注意的是,上面的这些信息,都应该从服务器去获取,比如说随机字符串之类的长短也不一定和上面例子中的一致。具体是什么,得看你们的后端给的是什么。
不出意外的话,通过上面接口的调用,你就可以正常使用微信提供的APP支付了。