Android移动支付——微信支付

最近在做国内外移动支付这一块,初次尝试,踩了很多坑,另外个人感觉微信支付的开发文档并不是太好,重新整理一下,以供回顾和分享:

  • 微信支付的必须在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只要接收数据就可以.

以上是自己在做微信支付时,一开始被开发文档整懵了,最后全部梳理完了发现,其实就是这么几个步骤,希望大家能够指点交流,以便完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值