本文章仅作为个人笔记
接入方式可参考微信登录接入
-
IOS端(swift):
- 主要接入和代码可参考微信登录接入
-
本人使用HandyJSON框架方便json处理,用于实例化服务器返回对象
import HandyJSON class ResponseWX: HandyJSON { var appid: String = ""; var partnerid: String = ""; var noncestr: String = ""; var packageName: String = ""; var prepayid: String = ""; var timestamp: UInt32 = 0; var sign: String = ""; var orderNumber: String = ""; required init() { } }
-
创建支付回调类并实例化
struct WechatPayBack: HttpUtilsBack { func finish(result: String?, error: BaseError?) { if error == nil { //支付成功 } else { //支付失败 } } } //实例化支付回调及为AppDelegate的wechatPayBack赋值 appDelegate?.wechatPayBack = WechatPayBack()
-
调起支付关键代码
//从服务器获取签名信息,这里只需要服务器处理即可。 let result: ResponseWX = getResultFromService() //创建支付请求实例并调起支付。 let req = PayReq() req.openID = result?.appid req.partnerId = result?.partnerid req.package = result?.packageName req.prepayId = result?.prepayid req.nonceStr = result?.noncestr req.timeStamp = result!.timestamp req.sign = result?.sign WXApi.send(req)
-
- 主要接入和代码可参考微信登录接入
-
Android端:
- 主要接入和代码可参考微信登录接入
- 除按照微信登录方式接入外还需进行如下操作:
-
创建 包名.wxapi.WXPayEntryActivity 文件,保证内容如下(WechartUtils下面会给出):
import android.app.Activity; import android.os.Bundle; import android.util.Log; import com.tencent.mm.opensdk.constants.ConstantsAPI; import com.tencent.mm.opensdk.modelbase.BaseReq; import com.tencent.mm.opensdk.modelbase.BaseResp; import com.tencent.mm.opensdk.modelpay.PayResp; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { public static final String APP_ID = "";//填入自己的appid public static Back authBack; public interface Back { public void onFiled(String errorMsg); public void onSuccess(String code, String state); } public static void registAuthBack(Back back) { authBack = back; } public static void unregistAuthBack() { authBack = null; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WechartUtils.getInstance(this, APP_ID) .handleIntent(this, this); } @Override public void onReq(BaseReq baseReq) { Log.e("-----1", "baseReq=" + baseReq); } @Override public void onResp(BaseResp baseResp) { switch (baseResp.getType()) { case ConstantsAPI.COMMAND_PAY_BY_WX: if (authBack != null) { // 0:成功; -1:错误; -2:用户取消; PayResp payResp = (PayResp) baseResp; if (payResp.errCode == 0) { authBack.onSuccess(String.valueOf(payResp.errCode), payResp.prepayId); } else { authBack.onFiled(baseResp.errStr); } } break; } finish(); } @Override protected void onDestroy() { super.onDestroy(); WechartUtils.getInstance(this, APP_ID) .unregisterApp(this); } }
-
创建WechartUtils文件用于公共处理支付
import android.app.Activity; import android.util.Log; import com.tencent.mm.opensdk.modelmsg.SendAuth; import com.tencent.mm.opensdk.modelpay.PayReq; import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; import com.tencent.mm.opensdk.openapi.WXAPIFactory; import java.util.concurrent.ConcurrentHashMap; public class WechartUtils { private static final WechartUtils wechartUtils = new WechartUtils(); private static final ConcurrentHashMap<String, IWXAPI> apis = new ConcurrentHashMap<>(); private WechartUtils() { } public static WechartUtils getInstance(Activity activity, String appId) { if (activity != null && !apis.containsKey(activity.getLocalClassName())) { IWXAPI api = WXAPIFactory.createWXAPI(activity, appId, true); api.registerApp(appId); apis.put(activity.getLocalClassName(), api); } return wechartUtils; } public WechartUtils handleIntent(Activity activity , IWXAPIEventHandler handler) { apis.get(activity.getLocalClassName()) .handleIntent(activity.getIntent(), handler); return this; } public void pay(Activity activity, String appId, String partnerId, String packageName , String prepayId, String nonceStr, String timeStamp, String sign) { if (activity == null) { return; } PayReq req = new PayReq(); req.appId = appId;//appid req.partnerId = partnerId;//微信支付分配的商户号 req.packageValue = packageName;//暂填写固定值Sign=WXPay req.prepayId = prepayId;//微信返回的支付交易会话ID req.nonceStr = nonceStr;//随机字符串 req.timeStamp = timeStamp;//时间戳 req.sign = sign;//签名 IWXAPI api = apis.get(activity.getLocalClassName()); if (api != null) { api.sendReq(req); } } public void login(Activity activity) { if (activity == null) { return; } SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = String.valueOf(System.currentTimeMillis()); IWXAPI api = apis.get(activity.getLocalClassName()); if (api != null) { api.sendReq(req); } } public void unregisterApp(Activity activity) { if (activity == null) { return; } IWXAPI api = apis.get(activity.getLocalClassName()); if (api != null) { api.unregisterApp(); apis.remove(activity.getLocalClassName()); } } }
-
在AndroidManifest.xml文件内注册activity
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:label="@string/app_name" />
-
创建好工具文件后可以开始准备开发了,这里贴出主要使用伪代码。
public class DemoActivity extends Activity { private WechartUtils wechartUtils; @Override protected void onCreate(Bundle savedInstanceState) { //初始化工具 wechartUtils = WechartUtils.getInstance(this, WXPayEntryActivity.APP_ID); //注册微信支付回调 WXPayEntryActivity.registAuthBack(new WXPayEntryActivity.Back() { @Override public void onFiled(String errorMsg) { //支付失败回调 } @Override public void onSuccess(String code, String state) { //失败成功回调 } }); } //开始微信支付方法 private void startWechatPay() { //去服务器获取签名信息 具体返回的信息可查看后面的后台开发 WXResponse response = getWXResponse(); //调用wechartUtils的pay方法调起微信支付。 wechartUtils.pay(this, response.appid, response.partnerid , response.packageName, response.prepayid, response.noncestr , response.timestamp, response.sign); } @Override protected void onDestroy() { //取消注册 wechartUtils.unregisterApp(this); WXPayEntryActivity.unregistAuthBack(); super.onDestroy(); } }
-
-
-
java后台:
- 主要接入和代码可参考 微信登录接入
- 用户获取支付签名信息只需要调用WechartUtils.getWXResponse()方法,返回对象即可。第一个参数为商品名称,di