dropInPay.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <view class="drop-in-payment__container">
  3. <view id="dropIn"></view>
  4. </view>
  5. </template>
  6. <script setup>
  7. import { t } from '@/locale';
  8. import { ref, reactive, nextTick } from "vue";
  9. import { Toast } from "@/utils"
  10. import { useDropInPayInfo } from './hooks'
  11. // props
  12. const props = defineProps({
  13. oid: { type: String, default: '' }
  14. })
  15. // emits
  16. const emit = defineEmits(['open', 'close', 'success', 'error']);
  17. const {
  18. dropInElement,
  19. handleInit,
  20. handleUnmount,
  21. fetchPaymentInitData } = useDropInPayInfo();
  22. const onMount = () => {
  23. nextTick(() => {
  24. // testDemo()
  25. })
  26. fetchPaymentInitData({ oid: props.oid }, bindEventListener);
  27. }
  28. const onDestroy = () => {
  29. handleUnmount()
  30. }
  31. // 事件绑定
  32. function bindEventListener() {
  33. if (!dropInElement.value) return;
  34. dropInElement.value.on('success', onSuccess);
  35. dropInElement.value.on('error', onError);
  36. dropInElement.value.on('ready', onReady);
  37. }
  38. const onReady = (event) => {
  39. console.log('----- drop-in payment ready -----', event)
  40. }
  41. // 成功回调
  42. const onSuccess = (event) => {
  43. console.log('----- drop-in payment success -----', event)
  44. }
  45. // 失败回调
  46. const onError = (event) => {
  47. console.log('----- drop-in payment error -----', event)
  48. Toast(event.detail.error.message || event.detail.error || t("pay_fail_msg", {}) || "fail!");
  49. }
  50. defineExpose({
  51. onMount,
  52. onDestroy
  53. })
  54. </script>
  55. <style lang="less" scoped>
  56. @import url('@/style.less');
  57. /* #dropIn {
  58. width: 100%,
  59. margin: 10rpx auto,
  60. } */
  61. </style>