微信支付

本文介绍了一次微信支付集成的经验分享,详细记录了从初始化到完成支付的全过程,包括获取必要参数、构造支付请求及处理支付回调等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中有用到微信支付,这里简单记录一下:
OK,第一次集成微信支付,肯定是先去看官方文档了,然而,看了一遍感觉有点懵逼,当然了,需要引用的jar包啊,sdk啊,添加权限啊,申请AppID啊这些照着文档来就好。
我初次集成的时候其实懵逼的是支付时发送给服务端的参数,参数,参数,重要的事情说三遍。。。
共有七个必填参数:

appid —————————应用id
partnerId ———————–商户id
prapayId ———————–预支付交易会话id
package ————————扩展字段
nonceStr————————随机字符串
timeStamp———————-时间戳
sign——————————签名

其中,appid是我们申请的应用id,其他的参数是服务端返回给我们的,我们只需要接收这几个参数即可。
然后,在点击支付时:

public void payment(BaseMessageEntity data){
    String wxPayInfoStr = StringUtils.Base64Decode(data.data);
    if (!TextUtils.isEmpty(wxPayInfoStr)) {
        try {
              JSONObject wxPayJSON = new JSONObject(wxPayInfoStr);
              if (wxPayJSON != null) {
                 // 微信支付
                  IWXAPI api = WXAPIFactory.createWXAPI(this, ThirdPartyConstants.WX_APPID);                
       api.registerApp(ThirdPartyConstants.WX_APPID);                  
    // api.isWXAppInstalled();                                         
       PayReq payReq = new PayReq();
       payReq.appId = wxPayJSON.getString("appid");
       payReq.partnerId = wxPayJSON.getString("partnerid");
       payReq.prepayId = wxPayJSON.getString("prepayid");
       payReq.nonceStr = wxPayJSON.getString("noncestr");
       payReq.timeStamp = wxPayJSON.getString("timestamp");
       payReq.packageValue = wxPayJSON.getString("package");
       payReq.sign = wxPayJSON.getString("sign");
       payReq.extData = "app data"; // optional
       //发送请求
       api.sendReq(payReq);
      }
     } catch (JSONException e) {
           e.printStackTrace();
     }
}

这样就可以调起微信支付页面来支付了。需要注意的是签名,签名,签名,这是个坑,,,需要是app的正式签名。
最后,再来一段代码,里面有注释哟—–

/**
 * 这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。页面的布局可以是你自定义的布局,
 */
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这个类中的布局是可以自定义的,如果你不需要展示什么布局,而是要跳转页面,把这段代码删除即可
//        setContentView(R.layout.pay_result);

        api = WXAPIFactory.createWXAPI(this, ThirdPartyConstants.WX_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) {
        L.d("onPayFinish, errCode = " + resp.errCode);
        EventBus.getDefault().post(new BusEvent(EventConstants.EVENT_WXPAY_RESULT));

        //下面是官方的处理方式,直接给了一个dialog
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
//          AlertDialog.Builder builder = new AlertDialog.Builder(this);
//          builder.setTitle(R.string.app_tip);
//          builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
//          builder.show();
        }
        //自定义处理方式
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if(resp.errCode == 0){
                Toast.makeText(WXPayEntryActivity.this,"支付成功",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(WXPayEntryActivity.this,"支付失败",Toast.LENGTH_SHORT).show();
            }
        }
        //别忘记最后要将这个页面finish()
        finish();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值