最近在做国内外移动支付这一块,初次尝试,踩了很多坑,另外个人感觉微信支付的开发文档并不是太好,重新整理一下,以供回顾和分享:
微信支付的必须在Release环境下测试有效微信支付/登陆必须创建名为“wxapi”的包,并在这个包下实现WXEntryActivity/WXPayEntryActivity–(登陆/支付)两个Activity,这一步demo里面会有,直接拷贝后重定义自己需要的逻辑就可以 -参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调) net.sourceforge.simcpux 该包名必须和微信开发者平台里面注册的包名一致,在这个包名下的wxapi实现WXEn t r yActivity/WXPayEntryActivity才能实现回调======以下是微信支付的几个步骤,由于开发文档里面介绍的步骤含有很多坑,所以重新整理了下完整的支付开发步骤=====**一.微信开发步骤说明:https://pay.weixin.qq.com/wiki/doc/api/img/chapter8_3_1.png** 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。 步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay 步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】 步骤5:商户后台接收支付通知。api参见【支付结果通知API】 步骤6:商户后台查询支付结果。,api参见【查询订单API】
二.进入正式开发 1.微信开发者账号申请支付功能,通过后,导入libammsdk.jar 微信jar包 2.调起支付:从上面步骤我们可以得知,微信推荐由服务后台接口获取信息,然后调起支付,我是这么实现的 /** * 调起支付,req的参数由服务端统一下单后传递过来 */ public static void doWXPay(Context context) { IWXAPI wxapi = getWXAPI(context); PayReq req = new PayReq(); //商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID req.appId = “appid”; req.partnerId = "partnerid"; //商户号 req.prepayId = "prepayid"; //微信返回的支付交易会话ID req.packageValue = "Sign=WXPay"; //暂统一填写固定值Sign=WXPay req.nonceStr = "noncestr"; //随机字符串 req.timeStamp = "timestamp"; //时间戳 req.sign = data.sign; //签名 wxapi.sendReq(req); } 其中,req.appId ... req.sign 七个字段都是从移动端自己服务器获取的,接口从微信后台获取 /** * 获取api */ public static IWXAPI getWXAPI(Context context) { IWXAPI api = WXAPIFactory.createWXAPI(context, APP_ID, false); api.registerApp(APP_ID); //注册api if(!api.isWXAppInstalled()) { //判断微信是否安装 Log.e("WXPay", "未安装微信"); } return api; }3.在报名wxapi下实现WXPayEntryActivity,名称不能错——这一步也是产生支付结果回调的
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.activity_wxentry); api = getWXAPI(this); 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 baseResp) { //errCode: 0, success; -1, error; -2, cancel by user switch (baseResp.errCode) { case 0: //用户同意 if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { Log.d("WXPay", "微信支付成功"); } break; default: if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { Log.d("WXPay", "微信支付失败"); break; } } }以上就是微信支付所需要的所有步骤和代码了,这么一看,是不是逻辑也很清晰了?其实微信支付代码总共分两步:调起支付 和 实现支付结果回调——WXPayEntryActivity, 至于统一下单,那是后台实现的,Android只要接收数据就可以.
以上是自己在做微信支付时,一开始被开发文档整懵了,最后全部梳理完了发现,其实就是这么几个步骤,希望大家能够指点交流,以便完善。
